对于我的输入XML,我编写了XSLT,但我不能使XSLT正确生成<mynewtag>
。请帮忙。
XML输入:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book.child.1>
<title>charithram</title>
<author>sarika</author>
</book.child.1>
<book.child.2>
<title>doublebell</title>
<author>psudarsanan</author>
</book.child.2>
</books>
预期输出:
<?xml version="1.0" encoding="UTF-8"?>
<newbooks>
<newbook>
<mynewtag id="book1" />
<title>charithram</title>
<author>sarika</author>
</newbook>
<newbook>
<mynewtag id="book2" />
<title>doublebell</title>
<author>psudarsanan</author>
</newbook>
</newbooks>
我尝试过的XSLT:[我理解<mynewtag>
]的语法不正确。但我不知道要修复它以获得所需的输出。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8"
indent="yes" />
<xsl:template match="/">
<newbooks>
<xsl:for-each select="books/child::*">
<newbook>
<mynewtag id="book<xsl:number value='position()' format='1' />" />
<title>
<xsl:value-of select="title" />
</title>
<author>
<xsl:value-of select="author" />
</author>
</newbook>
</xsl:for-each>
</newbooks>
</xsl:template>
</xsl:stylesheet>
尝试在线XSLT转换器,http://www.freeformatter.com/xsl-transformer.html
我尝试将位置分配给变量,但我仍面临同样的问题,即不知道如何使用属性值book
追加它。
<xsl:variable name="cnt">
<xsl:number value='position()' format='1' />
</xsl:variable>
<xsl:value-of select = "$cnt" />
注意:如果我从XSL中删除<xsl:number value='position()' format='1' />
,那么语法是正确的,但我将无法生成book1
book2
等<mynewtag>
属性值。
请帮忙。
已添加:<mynewtag>
是必需元素。它就像输出中需要的任何其他XML元素,如<title>
。它不仅仅是保存属性id
的元素。对不起,如果对此感到困惑。
在此处添加解决方案,从获得的答案总结:
<mynewtag>
<xsl:attribute name="id">
<xsl:text>book</xsl:text>
<xsl:number value='position()'/>
</xsl:attribute>
</mynewtag>
或者很快:
<mynewtag id="book{position()}" />"
或
<newbook>
<xsl:variable name="cnt">
<xsl:number value='position()' format='1' />
</xsl:variable>
<mynewtag id="book{$cnt}" />
..........
IanRoberts提到的属性值模板。
答案 0 :(得分:2)
您不能在其他标签内放置标签。尝试:
<mynewtag>
<xsl:attribute name="id">
<xsl:text>book</xsl:text>
<xsl:number value='position()'/>
</xsl:attribute>
</mynewtag>
或者很快:
<mynewtag id="book{position()}" />"
<强>增加:强>
与您的问题没有直接关系,但我认为id属性应该应用于父<newbook>
元素,而不是创建一个人工子元素来保存它。