2013-05-01 67 views
0

相當簡單,但我的知識在這方面有限。我使用以下c#代碼來訪問我的SGML and XML documents中的元素值。Linq to XML - 如何獲得此元素值

當文檔中只有一個具有給定名稱的元素時,它工作正常,但只要具有多個具有相同名稱的元素,它就會引發異常,顯然!

我需要使用xpath或一些其他方式來指定元素的位置,我試圖獲得的價值。

​​

這工作得很好,如果只有一個在doc「chapnum」,但我需要在以下嵌套位置「dmaddres/chapnum」具體獲得「chapnum」的值。

請問怎麼樣?

以下是xml文檔的示例。我試圖獲取嵌套在「dmaddress」元素中的「chapnum」元素的值。

<?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> 
+3

您的描述比示例XML顯示要查找的值要難得多。請用一個例子來編輯你的問題。 – 2013-05-01 09:14:09

+0

您也應該發佈示例xml文件。它會幫助你更準確地得到答案。 – 2013-05-01 09:19:05

+3

'doc.Descendants(「dmaddress」)。後代(「chapnum」)。Single()。Value'? – Corak 2013-05-01 09:27:37

回答

2

是什麼?

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

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

可能會做一樣好。