使用XSLT在Unix中将XML转换为简单文件

6

我有一个 XML 文件(test.xml),内容如下:

<hudson>
<job>
<name>cedge</name> 
</job>
<job>
<name>techM</name> 
</job>
<job>
<name>infy</name> 
</job>
<job>
<name>DevP</name> 
<job>
<name>line</name> 
<nextBuildNumber>14</nextBuildNumber> 
</job>
<job>
<name>ment</name> 
<nextBuildNumber>85</nextBuildNumber> 
</job>
<job>
<name>FreeS</name> 
<nextBuildNumber>96</nextBuildNumber> 
</job>
<job>
<name>test</name> 
</job>
</job>
<job>
<name>Email</name> 
</job>
<job>
<name>investigate</name> 
<nextBuildNumber>26</nextBuildNumber> 
</job>
<job>
<name>Java</name> 
</job>
<job>
<name>Tools</name> 
</job>
</hudson>

需要输出以下格式的文件:

"line" "14"
"ment" "85"
"FreeS" "96"
"investigate" "26"

尝试以下方法:
 xsltproc x.xslt test.xml 

按以下方式制作x.xslt:

 <xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="//job">
"<xsl:value-of select="name"/>" = "<xsl:value-of select="nextBuildNumber"/>"
 </xsl:template>
 </xsl:stylesheet>

仅获取
 "investigate" = "26"

一起处理空值。无法从“job-Devp”标签获取数据,希望能得到帮助。

1个回答

4
你的XSLT并没有完全生成你所说得到的输出,因为它还会输出所有根元素hudson下直接的job元素的行,就像这样...
 "cedge" = ""

此外,当匹配 job 元素时,您不会通过选择这些元素的任何后代 job 元素来继续处理,因此嵌套的 job 元素不会被选中。
可能最简单的方法是添加一个模板,匹配文档节点 \ 并明确选择您需要的所有 job 元素(即具有 nextBuildNumber 的元素)。
尝试使用此 XSLT。
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:output method="text" />

 <xsl:template match="/">
     <xsl:apply-templates select="//job[nextBuildNumber]" />
 </xsl:template>

 <xsl:template match="job">
    <xsl:text>"</xsl:text>
    <xsl:value-of select="name"/>
    <xsl:text>" = "</xsl:text>
    <xsl:value-of select="nextBuildNumber"/>
    <xsl:text>"&#10;</xsl:text>
 </xsl:template>
 </xsl:stylesheet>

感谢@TimC的回复,它现在可以工作了 :) :) :) 在我的问题部分,在“x.xslt”文件中,“value-of select”字符串之间有一个“空格”。这是我的错误,对此我很抱歉。我已经编辑了正确的代码的问题。 - joy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接