0

以下のようなxmlがあります。

<?xml version='1.0' encoding='utf-8'?>
<Document>
    <name>SMTH</name>
    <Group>
        <GroupHeader>Some Description</GroupHeader>
        <Port>
            <ID>13553</PortID>
            <Name>Some name</PortName>
            <Number>PO1005</WorldPortNumber>
            <Section>
                <SectionHeader ID="63">General overview</SectionHeader>
                <PAR ID="59341" updatedate="19/05/2010 08:35:51">Important data</PAR>
            </Section>
            <Section>
                <SectionHeader ID="66">Max size</SectionHeader>
                <PAR ID="59344" updatedate="19/05/2010 08:35:51">Important data</PAR>
            </Section>
        </Port>
    </Group>
</Document>

ID、名前、番号、および PAR 子ノードのみを含むすべてのポート ノードを選択したいと思います(残りの子ノードは無視する必要があります)。結果は、上に挙げた 4 つの子ノードを含むポート ノードのコレクションになります。これは次のようになります。

Port:
    ID=234234
    Name=blabla
    Number=324234
    PAR=sdfsdfs
    PAR=fgfgfg
Port:
    ID=5555
    Name=blabla
    Number=ghfh
    PAR=sdfsdfs
    PAR=fgfgfg
...

どうもありがとう!

4

2 に答える 2

2

次のようなもの:

<xsl:for-each select="//Port">
  <xsl:copy-of select="*[name()='ID' or name()='Name' or name()='Number']"></xsl:copy-of>
  <xsl:copy-of select="Section/*[name()='PAR']"></xsl:copy-of>
</xsl:for-each>

それが役立つことを願っています。:)

よろしく、ハリー

于 2012-12-13T16:11:08.017 に答える
1

あなたが要求したことは、単一の XPath 式では達成できません。

XPath 式は、ドキュメント内に存在するノードまたはノードセットを選択します。XPath を使用して要素を選択するPortと、その要素は変更されずに返され、親と子を含む既存のドキュメント コンテキストがすべて含まれます。

Portunion を使用して、とは別に各子孫要素を|選択するか、各Port要素を選択してから、それぞれPortをコンテキストとして、使用する子孫のみを選択する (または、使用しない子孫を削除/無視する) ことができます。したくない)。

これを行う方法は、ノードを取得したときにノードをどうするかによって異なります。入力からサンプル出力を生成したい場合は、XSLT が適切な選択になる可能性があります。

于 2012-12-13T16:17:30.253 に答える