0

このXMLファイルで必要なノードを取得するための適切なXPATH構文を見つけるのに問題があります。1つは、XMLにNameSPaceがないため、コードに1つ追加する必要があります。これは私のXPATHに影響すると思います。

次のようなXMLファイルがあります。

<configuration xmlns="http://schemas.microsoft.com/support/2003/02/config">
  <name>Content</name>
  <description>Desc</description>
  <lastModifiedBy>Me</lastModifiedBy>
  <lastModifiedDate>2011-04-18T14:05:00</lastModifiedDate>
  <section name="MaintenanceNotices">
    <key name="MaintenanceNote1" value="The Title Value" />
    <link id="1234" type="5" href="" target="_self" name="MaintenanceNote1a">
      <description>Description</description>
    </link>
  </section>
</configuration>

したがって、XPATHの場合、「CONFIGURATION」要素で「NAme」NODE値を取得する場合は、次のXPATHを使用すると想定します。

/configuration/name

しかし時々私はそれにns:を追加する必要があります:

/ns:configuration/ns:name

そして、私は次のように要素値を見つけることができます:

while (xmlNodeIterator.MoveNext()) {
    result += xmlNodeIterator.Current.SelectSingleNode("name", nsmgr).ToString();
}

しかし、これは私にはまったく機能していません。どのxpathを試しても、XMLに値は見つかりません。これが私のコードです:

    private string GetXML()
    {
        string result = string.Empty;
        string fileName = "Content.xml";
        string filePath = "C:\\Content\\{0}";

        XPathDocument xdoc = new XPathDocument(string.Format(filePath, fileName));

        var nav = xdoc.CreateNavigator();

        XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());
        nsmgr.AddNamespace("ns", "http://schemas.microsoft.com/taxonomy/2003/1");
        nsmgr.AddNamespace("gds", "http://support.microsoft.com/common/schemas/gdsPage/1/");

        string sectionName = "MaintenanceNotices";
        string xpath = "/configuration"; 

        //  section[name={0}]"; ///key[name=MaintenanceNote1]/";

        XPathNodeIterator xmlNodeIterator = nav.Select(string.Format(xpath, sectionName), nsmgr);

        while (xmlNodeIterator.MoveNext())
        {
            result += xmlNodeIterator.Current.SelectSingleNode("name", nsmgr).ToString();
        }

        return result;
    }

問題が発生したり、Xpath構文について提案したりできますか?

ありがとう。

4

2 に答える 2

1

ドキュメントのノードが含まれる名前空間を登録しないことを除いて、XPathに問題はありません。

"http://schemas.microsoft.com/support/2003/02/config"

(を使用して)自分の言語でそれを行う方法をすでに知っているように見えるAddNamespaceので、おそらくそれは単なる見落としです。より多くの情報が必要な場合、これは役立つはずです:

于 2011-03-23T19:30:53.117 に答える
1

@lwburkが言ったように、名前空間を登録する必要があります。

selectステートメントは次のようになります。

var xmlNodeIterator = nav.Select("/ns:configuration/ns:name", nsmgr)
于 2011-03-23T19:52:28.700 に答える