我正在使用这行代码从XML文件中获取两个数据条目
perl xmlPerl.pl zbxml.xml "//zabbix_export/templates/template/items/item/name/text() | //zabbix_export/templates/template/items/item/description/text()"
获取数据并垂直显示。例如:
我在c#中使用了这个,并且有一些代码,所以它会像这样显示
描述中甚至有一些空白。这是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";
}
答案 0 :(得分: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,'
')"/>
</xsl:template>
</xsl:stylesheet>
应用此XSLT的简单Perl脚本可以解决这个问题 - 例如,请参阅this(或者应用XSLT的任何其他命令行实用程序,如msxsl.exe)