代码之家  ›  专栏  ›  技术社区  ›  Abstraction

XML结束标记名必须与XML结束标记名完全匹配吗?

  •  1
  • Abstraction  · 技术社区  · 8 年前

    我有以下XML(测试示例):

    <?xml version="1.0" encoding="UTF-8"?><?mso-application progid="Excel.Sheet"?>
    <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
    xmlns:o="urn:schemas-microsoft-com:office:office"
    xmlns:x="urn:schemas-microsoft-com:office:excel"
    xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" >
    <Styles>
    <Style ss:ID="s21"><NumberFormat ss:Format="@"/></Style>
    </Styles>
    <Worksheet ss:Name="--">
    <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1" x:FullRows="1" ss:StyleID="s21">
        <Column ss:StyleID="s21" ss:Width="184"/>
        <Row>   
            <Cell><ss:Data ss:Type="String">42</Data></Cell>
    </Row></Table></Worksheet></Workbook>
    

    DataSet.ReadXml() The 'ss:Data' start tag on line 12 position 14 does not match the end tag of 'Data'. Line 12, position 43.
    虽然W3C文档中的所有示例都显示了命名空间限定的结束标记,但MS Excel在打开此类文件时没有任何警告。

    背景 DataSet.Namespace = "ss"; 不会改变任何事情。

    如何读取这样的文件,最好不添加额外的库?

    1 回复  |  直到 8 年前
        1
  •  1
  •   kjhughes    8 年前

    是的,XML结束标记必须与XML开始标记完全匹配,包括任何命名空间前缀。

    根据您的问题:

    图书馆?

    如果要使用兼容的XML工具成功解析XML,必须将其修复为格式良好的XML。特别是,您必须将结束标记更改为 @jdweng suggests in the comments </ss:Data>

    根据 W3C XML Recommendation, section 3.1 :

    结束标记 包含一个与 开始标记中给出的元素类型:]

    根据您的问题:

    虽然W3C文档中的所有示例都显示了命名空间限定的端

    那么,MS Excel没有以兼容的方式处理XML,很可能遗漏了其他问题。

    How to parse invalid (bad / not well-formed) XML?