2010-07-06 82 views
1

我遇到了以下問題。我有一個XML文件是這樣的:XPathSelectElement如何工作? C#

<Source Name ="ClassificationManager"> 
    <Table Name ="PositiveRegex"> 
    <Row> 
     <Field Name="RegexPattern">^.*$</Field> 
     <Field Name="Fraction">5.1</Field> 
     <Field Name="ClassificationTypeNumber">1</Field> 
    </Row> 
    <Row> 
     <Field Name="RegexPattern">^.*$</Field> 
     <Field Name="Fraction">0.1</Field> 
     <Field Name="ClassificationTypeNumber">2</Field> 
    </Row> 
    </Table> 

    <Table Name ="NegativeRegex"> 
    <Row> 
     <Field Name="RegexPattern">^.*$</Field> 
     <Field Name="ClassificationTypeNumber">1</Field> 
    </Row> 
    <Row> 
     <Field Name="RegexPattern">^.*$</Field> 
     <Field Name="ClassificationTypeNumber">2</Field> 
    </Row> 
    </Table> 

</Source> 

和C#程序:

XDocument doc = XDocument.Load(@"C:\Repository.xml"); 

    XElement element = doc.XPathSelectElement(@"//Source[@Name='ClassificationManager']/Table[@Name='NegativeRegex']"); 

    foreach (var xmlRow in element.Elements("Row")) 
    { 
     Console.WriteLine(xmlRow.XPathSelectElement(@"//Field[@Name='ClassificationTypeNumber']").Value); 
    } 

輸出爲1, 1但不1, 2,我希望它是。怎麼了?如何修改C#代碼以獲取我需要的內容?
謝謝你的幫助!

回答

0
Console.WriteLine(xmlRow.XPathSelectElement(@"//Field[@Name='ClassificationTypeNumber']").Value); 

必須是:

Console.WriteLine(xmlRow.XPathSelectElement(@"/Field[@Name='ClassificationTypeNumber']").Value); 

//從根,而不是當前元選擇。

+2

你幾乎是正確的。你只需要在斜線前加一個點。 – StuffHappens 2010-07-06 13:47:04