0

このコード行を使用して、XML ファイルから 2 つのデータ エントリを取得しています。

perl xmlPerl.pl zbxml.xml "//zabbix_export/templates/template/items/item/name/text() | //zabbix_export/templates/template/items/item/description/text()"

これはデータを取り、それを垂直に表示します。例えば:

  • 名前1
  • 説明1
  • 名前2
  • 説明2

私はこれをC#で使用し、このように表示されるようにいくつかのコードを持っていました

  • 名前1 - 説明1
  • 名前2 - 説明2
  • name3 - (説明がないため空白)

説明にいくつかの空白さえありました。役立つかもしれないので、ここにc#コードがあります。

XPathExpression expr;
        expr = nav.Compile("/zabbix_export/templates/template/items/item/name | /zabbix_export/templates/template/items/item/description");
        XPathNodeIterator iterator = nav.Select(expr);

        //Iterate on the node set
        List<string> listBox1 = new List<string>();
        listBox1.Clear();
        try
        {
            while (iterator.MoveNext())
            {

                XPathNavigator nav2 = iterator.Current.Clone();
               // nav2.Value;
                listBox1.Add(nav2.Value);
                Console.Write(nav2.Value);
                iterator.MoveNext();
                nav2 = iterator.Current.Clone();
                Console.Write("-" + nav2.Value + "\n");

今、Perl に切り替える必要があります。必要なことを行うために Perl コードを見つけようとする必要があるのか​​、それとも XPath で実行できるのかがわかりません。いくつかの w3 チュートリアルを見てみましたが、探しているものが見つかりませんでした。

ありがとう!

編集 - xmlPerl.pl のこの部分を編集する必要がありますか?

# print each node in the list
foreach my $node ( $nodeset->get_nodelist ) {
print XML::XPath::XMLParser::as_string( $node ) . "\n";
}
4

1 に答える 1

1

XPathでは実行できません。これは、XSL変換を使用して実行できます。

<xsl:stylesheet 
  version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="text"/>

  <xsl:template match="text()"/>

  <xsl:template match="item">
    <xsl:value-of select="concat(name,' - ',description,'&#x0d;&#x0a;')"/>
  </xsl:template>

</xsl:stylesheet>

このXSLTを適用する単純なPerlスクリプトがそのトリックを実行します-たとえばこれを参照してください(または、msxsl.exeのようにXSLTを適用する他のコマンドラインユーティリティ)

于 2012-06-25T18:54:29.037 に答える