【问题标题】:XmlDocument.GetElementById() is returning nullXmlDocument.GetElementById() 返回 null
【发布时间】:2015-03-12 04:32:24
【问题描述】:

这是我的 XML:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE taxes[
<!ELEMENT tax (name,percent,description)>
<!ATTLIST tax id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT percent (#PCDATA)>
<!ELEMENT description (#PCDATA)>
]>
<taxes>
    <tax id="Tax-1">
        <name>Tax 1</name>
        <percent>6.75</percent>
        <description>Ohio sales tax</description>
    </tax>
</taxes>

还有我的 C# 代码:

XmlDocument doc = new XmlDocument();
doc.Load("path-to-file");

XmlElement element = doc.GetElementById("Tax-1");

每当我尝试使用element 做事时,我都会得到NullReferenceException。

我做了一些研究,发现需要有效的 DTD,但据我所知,一切都是有效的......

【问题讨论】:

标签: c# .net xml dtd


【解决方案1】:

您的 DTD 不正确。 对于您的 XML,正确的 DTD 是:

<!DOCTYPE taxes[
<!ELEMENT taxes (tax*)>
<!ELEMENT tax (name,percent,description)>
<!ATTLIST tax id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT percent (#PCDATA)>
<!ELEMENT description (#PCDATA)>
]>

【讨论】:

  • 修复了!太感谢了。我还将“id”的 CDATA 更​​改为 ID,这似乎也可以正常工作。
【解决方案2】:
<!ATTLIST tax id ID #REQUIRED>

您的 tax 元素上的 id 属性也可以称为 id 以外的其他名称,例如,taxid:

<!ATTLIST tax taxid ID #REQUIRED>

【讨论】:

    猜你喜欢
    • 2011-04-16
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 2020-06-19
    • 2011-10-15
    相关资源
    最近更新 更多