0

我正在使用这行代码从 XML 文件中获取两个数据条目

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>

A simple Perl script that applies this XSLT will do the trick - see this for example (or any other command-line utility that applies an XSLT for that matter - like msxsl.exe)

于 2012-06-25T18:54:29.037 回答