0

私のXMLには、次のようなものがあります。

<people>
    <person>
        <name>
            <first>Bob</first>
            <last>Bobbertson</last>
        </name>
        <age>80</age>
    </person>
    ...
</people>

セクション全体を分離コードに渡して<person>、C# コードですべてのサブノード ( <name><first><last>) にアクセスできるようにしたいと考えています。

XSLT を使用して HTML を生成しています。XSLT ファイルには、次のような行があります。

<xsl:value-of select="custom:SelectPerson($selectedPerson)"/>

私のコードビハインドでこれを呼び出します:

public string SelectPerson(System.Xml.XPath.XPathNodeIterator selectedPersonNodes)
{
    foreach (var node in selectedPersonNodes)
    {
        Debug.WriteLine(node.ToString());
    }
    ...
}

私がやりたいことは、foreachループを 3 回行い、「Bob」、「Bobbertson」、「80」の順に出力することです。しかし、何が起こっているかというと、一度通過して "BobBobbertson80" を出力するということです。

XSLT で生成された HTML からコード ビハインドにノードを渡す方法はありますか?

4

2 に答える 2

2

C# 開発環境にアクセスできないため、以下の C# コードはテストされていないことに注意してください。

C# コードが行っていることは正しいです。ノードを 1 つだけ含む反復子を渡しています。(調べるselectedPersonNodes.Countために調べます)。そのノードは、<person>あなたが言うように子孫を持つ要素ですが、それでも単一のノードです。

XPathNodeIterator複数のperson要素を含めることができると仮定すると、次のように書く必要があります

foreach (var person in selectedPersonNodes)
{
  Debug.WriteLine(person.SelectSingleNode("name/first").ToString());
  Debug.WriteLine(person.SelectSingleNode("name/last").ToString());
  Debug.WriteLine(person.SelectSingleNode("age").ToString());
}

または、常に人の人が含まれている場合は、次のように言うことができます

selectedPersonNodes.MoveNext();
XPathNavigator person = selectedPersonNodes.Current;

Debug.WriteLine(person.SelectSingleNode("name/first").ToString());
Debug.WriteLine(person.SelectSingleNode("name/last").ToString());
Debug.WriteLine(person.SelectSingleNode("age").ToString());

しかし、私が言ったように、これらのいずれかを行う前に の値をチェックしたいかもしれませんselectedPersonNodes.Count

于 2013-05-10T20:41:05.023 に答える