【发布时间】:2020-01-02 18:44:51
【问题描述】:
我有以下 xsd 文件...
<?xml version="1.0" encoding="Windows-1252"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="order">
<xs:complexType>
<xs:sequence>
<xs:element name="ordername" maxOccurs="1" minOccurs="1" type="xs:string" />
<xs:element name="articles">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="unbounded" name="article">
<xs:complexType>
<xs:sequence>
<xs:element name="Account" maxOccurs="1" minOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="1|5|7|9"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Vat" maxOccurs="1" minOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="1|2|3"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我正在尝试访问特定元素的所有允许模式。在这种情况下,我想找到“帐户”的允许模式,它应该给我“1|5|7|9”。理想情况下,我希望能够直接访问该值,就像这样......
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(fileName);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
nsmgr.AddNamespace("xs", "http://www.w3.org/2001/XMLSchema");
var nodeToAccess = xmlDoc.DocumentElement.SelectSingleNode("order/articles/article/Account", nsmgr);
但这不起作用,谁能告诉我正确的方法吗?
【问题讨论】:
-
XPath 适用于节点,而不适用于节点的名称属性。所以你需要更多类似
element[@name="order"]//element[@name="articles"]等的东西。考虑阅读some documentation about XPath,也许可以找到一个在线实用程序,它将你的 XPath 与示例文档交互匹配,等等。