1

xml 宣言がある場合とない場合がありNodeElement、ルート ノードとして 1 つだけがあり、その後に 1 つだけ他の が続きNodeElement、さまざまな数のさまざまな種類の要素の組み合わせが含まれる、この単純な XML フラグメントを想定します。

<?xml version="1.0">
<NodeElement xmlns="xyz">
    <NodeElement xmlns="">
        <SomeElement></SomeElement>
    </NodeElement>
</NodeElement>

NodeElement名前空間なしで内部とその内容を選択するにはどうすればよいですか? たとえば、"//*[local-name()='NodeElement/NodeElement[1]']"(および私が試した他のバリエーション)は結果をもたらさないようです。

一般的に、私が実際に達成しようとしているのは、 XmlDocumentに含まれるより大きな XML ドキュメントのフラグメントを逆シリアル化することです。次のようなもの

 var doc = new XmlDocument();
 doc.LoadXml(File.ReadAllText(@"trickynodefile.xml")); //ReadAllText to avoid Unicode trouble.
 var n = doc.SelectSingleNode("//*[local-name()='NodeElement/NodeElement[1]']");
 using(var reader = XmlReader.Create(new StringReader(n.OuterXml)))
 {
    var obj = new XmlSerializer(typeof(NodeElementNodeElement)).Deserialize(reader);

適切な XPath 式が欠落していると思いますが、これはかなりわかりにくいようです。どんな助けでも大歓迎です!

4

2 に答える 2

1

これを試して:

/*/*

ルート ノードの子を選択します。

または

/*/*[local-name() = 'NodeElement']

local-name() = 'NodeElement'ルート ノードの子を選択します。

とにかくあなたの場合、両方の式が選択されます<NodeElement xmlns="">

于 2013-10-22T21:47:15.287 に答える