0

相当简单的一个,但我在这方面的知识有限。我正在使用以下 c# 代码来访问我的SGML and XML documents.

当文档中只有一个具有给定名称的元素时,它工作正常,但是一旦有多个具有相同名称的元素,它就会抛出异常,很明显!

我需要使用 xpath 或其他方式来指定我试图获取其值的元素的位置。

 XDocument doc = XDocument.Load(sgmlReader);
 string system = doc.Descendants("chapnum").Single().Value;
 return system;

如果文档中只有一个“ chapnum”,这可以正常工作,但我需要chapnum在以下嵌套位置“ dmaddres/chapnum”中专门获取“”的值。

请问如何?

这是 xml 文档的示例。我正在尝试获取chapnum嵌套在“ dmaddress”元素中的“”元素的值。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dmodule []>
<dmodule xmlns:dc="http://www.purl.org/dc/elements/1.1/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://www.s1000d.org/S1000D_2-3-1/xml_schema_flat/descript.xsd">
<idstatus>
<dmaddres>
<dmc><avee><modelic>xx</modelic><sdc>A</sdc><chapnum>29</chapnum>
<section>1</section><subsect>3</subsect><subject>54</subject><discode
>00</discode><discodev>AAA</discodev><incode>042</incode><incodev
>A</incodev><itemloc>D</itemloc></avee></dmc>
<dmtitle><techname>Switch</techname><infoname>Description of function</infoname>
</dmtitle>
<issno inwork="00" issno="001" type="new"/>
<issdate day="20" month="07" year="2012"/>
<language language="sx"/></dmaddres>
<status>
<security class="01"/><datarest><instruct><distrib>-</distrib><expcont
>Obey the national regulations for export control.</expcont></instruct>
<inform><copyright><para><refdm><avee><modelic>xx</modelic><sdc>A</sdc>
<chapnum>29</chapnum><section>1</section><subsect>3</subsect><subject
>54</subject><discode>00</discode><discodev>ZZZ</discodev><incode
>021</incode><incodev>Z</incodev><itemloc>D</itemloc></avee></refdm
></para></copyright><datacond>BREXREF=AJ-A-00-00-00-05ZZZ-022Z-D VERSUB=CDIM-V6</datacond>
</inform></datarest>
<rpc>xxxxx</rpc>
<orig>xxxxx</orig>
<applic>
<type>-</type>
<model model="xxxxx"><mfc>xxxxx</mfc><pnr>xxxxxxx</pnr></model>
</applic>
<brexref><refdm><avee><modelic>xx</modelic><sdc>A</sdc><chapnum>00</chapnum>
<section>0</section><subsect>0</subsect><subject>00</subject><discode
>05</discode><discodev>ZZZ</discodev><incode>022</incode><incodev
>Z</incodev><itemloc>D</itemloc></avee></refdm></brexref>
4

1 回答 1

2

像这样?

string system = doc.Descendants("dmaddres")
    .Single(e => e.Element("chapnum") != null)
    .Element("chapnum").Value;

string system = doc.Root.Element("dmaddres").Element("chapnum").Value;

可能也会这样做。

于 2013-05-01T09:27:32.120 回答