0

XML ドキュメントがあります。

<xsd:form-definition xmlns:xsd="http://...m.xsd"
                     xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                     xsi:schemaLocation="....xsd" ...>
    <xsd:page>
        <xsd:formant source-name="label" id="guid1" />
        <xsd:formant source-name="label  id="guid2" />
        <xsd:formant source-name="label" id="guid3">
            <xsd:value>2013-04-24</xsd:value>
        </xsd:formant>
   </xsd:page>
</xsd:form-definition>

そして、C#コードによって、特定の要素を反復処理してid属性を取得し、 value(存在する場合) - としましょうlabels

そうするために、私はコードを試します

    XDocument xml = (document load);

    XmlNamespaceManager ns = new XmlNamespaceManager(new NameTable());
    ns.AddNamespace("f", "http://m.xsd");


    foreach (XElement e in xml.XPathSelectElements("//f:formant[@source-name = 'label']", ns))
    {
     ....
    }

しかし、foreachループは要素を返しません。なんで ?

4

1 に答える 1

2

わたしにはできる。名前空間fxsd正確に一致していることを確認してください。あなたの例では、それらは一致しません。また、例には他の構文エラーがあります。たとえば、2 番目のsource-name値がformant二重引用符で終わっていません。

XDocument xml = XDocument.Parse(
@"<xsd:form-definition xmlns:xsd=""http://m.xsd""
                     xmlns:ds=""http://www.w3.org/2000/09/xmldsig#""
                     xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
    <xsd:page>
        <xsd:formant source-name=""label"" id=""guid1"" />
        <xsd:formant source-name=""label2"" id=""guid2"" />
        <xsd:formant source-name=""label"" id=""guid3"">
            <xsd:value>2013-04-24</xsd:value>
        </xsd:formant>
   </xsd:page>
</xsd:form-definition>");

XmlNamespaceManager ns = new XmlNamespaceManager(new NameTable());
ns.AddNamespace("f", "http://m.xsd");

foreach (XElement e in xml.XPathSelectElements(
    "//f:formant[@source-name = 'label']", ns))
{
    Console.WriteLine(e);
}
Console.ReadLine();
于 2013-04-24T11:12:25.927 に答える