Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用xslt unix将xml转换为简单文件_Xml_Bash_Shell_Unix_Xslt - Fatal编程技术网

使用xslt unix将xml转换为简单文件

使用xslt unix将xml转换为简单文件,xml,bash,shell,unix,xslt,Xml,Bash,Shell,Unix,Xslt,我有一个xml文件(test.xml)如下所示: <hudson> <job> <name>cedge</name> </job> <job> <name>techM</name> </job> <job> <name>infy</name> </job> <job> <name>DevP</name>

我有一个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>
尝试以下方法

 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>
以及空白值。未从“job Devp”标记获取数据
任何帮助都是值得的。

您的XSLT不会产生您所说的输出,因为它还会直接在根
hudson
下输出所有
job
元素的行,如下所示

 "cedge" = ""
此外,当您匹配
作业
元素时,您不会通过选择这些元素的任何后代
作业
元素来继续处理,因此不会拾取嵌套的
作业
元素

可能最简单的方法就是添加一个与文档节点
\
匹配的模板,并专门选择您需要的所有作业元素(即带有
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”文件中的“select”字符串的“value”之间有一个“空格”。我的坏儿子。我用正确的代码编辑了这个问题。
 "cedge" = ""
 <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>