3

XPathNodeIterator を使用して要素から値を選択しようとしています。しかし、XML ファイルから期待値を取得できません。

私のXMLファイル

<?xml version="1.0" encoding="utf-8"?>
<ns0:Entity xmlns:ns0="http://schemas.mycompany.com/1.0">
    <ns0:Data>
        <Address_Id xmlns:ns0="http://schemas.mycompany.com/1.0">7</Address_Id>
        <Customer_Id xmlns:ns0="http://schemas.mycompany.com/1.0">67</Customer_Id>
        <CustomerName xmlns:ns0="http://schemas.mycompany.com/1.0">My Customer 1</CustomerName>
    </ns0:Data>
</ns0:Entity>

値を取得するためのメソッド
2 つのメソッドを作成しましたが、どちらも必要な値を返しません。

private static string GetValue_Attempt1(XPathDocument xPathDocument, string xpathExpression)
{
    var xpathNavigator = xPathDocument.CreateNavigator();
    var xpathNodeIterator = xpathNavigator.Select(xpathExpression);
    xpathNodeIterator.MoveNext();
    return xpathNodeIterator.Current.Value;
}

private static string GetValue_Attempt2(XPathDocument xPathDocument, string xpathExpression)
{
    var xpathNavigator = xPathDocument.CreateNavigator();
    var xpathNodeIterator = xpathNavigator.Select(xpathExpression);
    xpathNodeIterator.MoveNext();
    var nodesNavigator = xpathNodeIterator.Current;
    var nodesText = nodesNavigator.SelectDescendants(XPathNodeType.Text, false);
    nodesText.MoveNext();
    return nodesText.Current.Value;
}

私のXPath

  • Address_Id を取得
    • XPath://Data/Address_Id/text()
    • 試行 1 の戻り値: 767My Customer 1。すべての値が連結されるのはなぜですか???
    • Attempt2 の戻り値: 7。良さそう
  • Customer_Id を取得
    • XPath://Data/Customer_Id/text()
    • 試行 1 の戻り値: 767My Customer 1。すべての値が連結されるのはなぜですか???
    • Attempt2 の戻り値: 7。Address_Id を取得するのはなぜですか??

質問
間違った XPath を使用している可能性があります。しかし、結果もわかりません。何が起こっているのかを理解するために。私が知りたいのですが:

  1. 要素の値を取得するためのより良い方法 (メソッド) はありますか?
  2. 使用する必要がある XPath 文字列は何ですか?
  3. GetValue_Attempt1メソッドが連結された文字列を返すのはなぜですか?
  4. GetValue_Attempt2メソッドが最初の要素のみの値を返すのはなぜですか?
4

1 に答える 1