1

ユーザー ID と名前を含む XML ファイルがあります。これらの属性の両方に値があるすべての要素を抽出したいと考えています。

これは私のxmlです

<pens>
<pen id="A">
    <user name="USER1" email="USER1EMAIL" />
</pen>
<pen id="B">
    <user name="USER2" email="USER2EMAIL" />
</pen>
<pen id="C"></pen>
<pen id="D">
    <user name="USER3" email="USER3EMAIL" />
</pen>
</pens>

このようなアウトが必要です

A - USER1
B - USER2
D - USER3

XSLで試してみましたが、わかりません...誰か助けてください。ありがとう

4

1 に答える 1

3

この XSLT の場合:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output omit-xml-declaration="no" indent="yes" method="text" />
  <xsl:strip-space elements="*" />

  <xsl:template match="user[@name][@email]">
    <xsl:value-of select="parent::*/@id" />
    <xsl:text> - </xsl:text>
    <xsl:value-of select="@name" />
    <xsl:text>&#10;</xsl:text>
  </xsl:template>

</xsl:stylesheet>

...元の XML に対して適用されます。

<pens>
  <pen id="A">
    <user name="USER1" email="USER1EMAIL"/>
  </pen>
  <pen id="B">
    <user name="USER2" email="USER2EMAIL"/>
  </pen>
  <pen id="C"/>
  <pen id="D">
    <user name="USER3" email="USER3EMAIL"/>
  </pen>
</pens>

...必要な結果が生成されます。

A - USER1
B - USER2
D - USER3

説明:

  • 要素の@method属性に値を設定します(テキスト結果に関心があるため)。<xsl:output>text

  • 1 つのテンプレートは、 および属性が定義され<user>ている要素に一致します。@name@email

  • そのような<user>要素が 1 つ見つかると、その親要素の@id属性の値、ダッシュ、要素の@name属性の値、最後に改行文字を出力します。

この結果をファイルに保存する方法は、使用している XSLT プロセッサによって異なります。コマンド ラインを介して変換を実行する場合 (たとえば、この方法で実行する場合xsltproc)、次のようなことができます。

$ xsltproc t.xsl input.xml > output.xml

于 2012-11-21T15:51:55.480 に答える