【问题标题】:Do i have to use namespace to match xml documents?我必须使用命名空间来匹配 xml 文档吗?
【发布时间】:2023-03-04 18:14:01
【问题描述】:

尝试让 xsd 匹配两个文档时遇到了一些麻烦:

XML 文档 1:

<?xml version="1.0" encoding="UTF-8"?>
<video contenttype="asf" fileextension=".wmv" hascontent="no" lang="en-GB" length="1800" pid="3678738364972" sid="">
    <lastmodified timestamp="1282678200000">
        Tue, 24 Aug 2010 19:30:00 +0000
    </lastmodified>
    <links/>
    <keywords/>
    <slides/>
    <copyright>
        Copyright owned by original broadcaster
    </copyright>
    <title>
        Friends
    </title>
    <comment>
        The One Where the Monkey Gets Away: Rachel accidentally lets Ross's pet monkey escape, then learns that her former best friend is engaged to marry her ex-fiancé.  [AD,S]
    </comment>
    <author>
        E4
    </author>
    <email/>
    <captioning/>
    <extendeddata>
        <data name="keepOriginal">
            0
        </data>
        <data name="keepTranscoded">
            0
        </data>
        <data name="realStartTime">
            1282677909
        </data>
        <data name="scheduledStartTime">
            1282678200
        </data>
        <data name="broadcastLength">
            1800
        </data>
        <data name="broadcastChannel">
            E4
        </data>
        <data name="paddingUsed">
            300000
        </data>
        <data name="transcodingSpec">
            -b 2.35M -a 128k --debug  --primary-format mp4 --podcast &quot;-l 270 -b 600 -R 48 -B 64&quot; --keep-files true
        </data>
        <data name="transcoding">
            succeeded
        </data>
        <data name="transcodingProfile">
            -b 2.35M -a 128k --debug  --primary-format mp4 --podcast &quot;-l 270 -b 600 -R 48 -B 64&quot; --keep-files true
        </data>
        <data name="transcoderDetails">
            ver 1.58.2.1, 2010-08-24  21:31:33 up 5 days, 11:24,  0 users,  load average: 3.08, 3.38, 2.67, OS20031 212.70.69.26
        </data>
        <data name="originalFilename">
            /var/lib/etvd/mpegts/E4/Friends (24-Aug-2010 20.30).emcast
        </data>
        <data name="originalRecordingTime">
            created 2010-08-24 , last modified 2010-08-24 : recording lasted 0s
        </data>
        <data name="primaryFormat">
            mp4
        </data>
        <data name="doXml">
            True
        </data>
        <data name="doFiles">
            True
        </data>
    </extendeddata>
    <categories>
        <category name="em:podcast">
            mp4
        </category>
    </categories>
</video>

XML 文档 2:

<?xml version="1.0" encoding="UTF-8"?>
<video xmlns="UploadXSD">
  <title>
    A vid with Pete
  </title>
  <description>
  Petes vid
  </description>
  <contributor>
    Pete
  </contributor>
  <subject>
    Cat 2
  </subject>
</video>

提议的 XSD:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="UploadXSD"
    targetNamespace="UploadXSD"
    elementFormDefault="qualified"
    xmlns="http://tempuri.org/UploadXSD.xsd"
    xmlns:mstns="http://tempuri.org/UploadXSD.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="video">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="title" minOccurs="1" type="xs:string"></xs:element>
        <xs:element name="description" type="xs:string"></xs:element>
        <xs:element name="contributor" type="xs:string"></xs:element>
        <xs:element name="subject" type="xs:string"></xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

</xs:schema>

是否可以使用 c# 来验证两个 xml 文档而不使用命名空间?因为 XML 文档 1(上图)是由第三方系统创建的,无法生成命名空间...

最近几天问了几个关于xml的问题,感谢帮助我对此很陌生...

【问题讨论】:

  • 也许我误读了这个问题,“不使用命名空间”是什么意思?

标签: c# xml xsd xml-namespaces xml-validation


【解决方案1】:

我相信您确实需要匹配命名空间。我曾经遇到过类似的问题,XML 文档不受我的控制(Adobe Smart Forms),我想根据我的 XSD 验证它。

为此,我在验证之前清理了 XML 文档,调整了命名空间,并在我的情况下删除了 Adob​​e 添加的大量垃圾。抱歉,我没有任何代码说明我是如何做到的。

【讨论】:

    【解决方案2】:

    据我所知,您不需要命名空间。我从来没有在我的任何 XSD 架构中使用过。

    以下是 Microsoft 关于该功能的文档: http://msdn.microsoft.com/en-us/library/aa258639%28SQL.80%29.aspx

    【讨论】:

    • XSD 确实不需要您使用命名空间,但这并没有解决最初的问题:有两个示例文档,其中一个位于命名空间中,另一个位于不。他想要的是一个完全忽略命名空间的 XSD。这不是一回事 - 不使用命名空间的 XSD 只会验证也不使用命名空间的文档。
    猜你喜欢
    • 2011-07-08
    • 2017-07-19
    • 1970-01-01
    • 2015-02-21
    • 2018-08-12
    • 2014-02-15
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    相关资源
    最近更新 更多