我正在使用基于w3schools.com上的书店示例的一些XML。我希望的最终结果是书店,书籍和标题列表 - 真正的用途是解析一些生产XML数据,将插件数据插入到具有大量不同来源的数据库表中 - 即减少a基本字段集到最小公分母。
var button = document.getElementById('filePick');
button.onclick(function() {
filepicker.pickAndStore({
//etc.
});
});
上面带有“祖先”的行是基于另一个帖子中的建议。我尝试了各种选项,包括“../Bookstore@StoreNamesttribute”,“../ Bookstore / Storename”...... / Storename“等等。它们都会出错”错误转换XML XSLT编译错误。第12行的'xsl:value-of'开始标记与'xsl:for-each'的结束标记不匹配。第14行,第4位。“
如果删除该行,我会
<?xml version="1.0" encoding="utf-8"?>
<Bookstores>
<Bookstore Storenameattribute="Barnes and Noble Attribute">
<Storename>Barnes and Noble</Storename>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
<book category="WEB">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<Bookstore Storenameattribute="Amazon Attribute">
<Storename>Amazon</Storename>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</Bookstores>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:csv="http://www.ora.com/XSLTCookbook/namespaces/csv">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:for-each select="Bookstores/Bookstore">
<xsl:text>|StoreName|</xsl:text>
<xsl:for-each select="book">
<xsl:text>|Title|</xsl:text>
<xsl:value-of select="title"/>
<xsl:text>|Author|</xsl:text>
<xsl:value-of select="author"/>
<xsl:value-of select="ancestor::Bookstore[1]/@Storenameattribute">
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
更接近我的需要 - 我希望
|StoreName||Title|Learning XML|Author|Erik T. Ray
|Title|XQuery Kick Start|Author|James McGovern
我知道“StoreName”栏目当然不会重复,因为我目前在for-each之外。
在这种特殊情况下,我将Storename和Storename属性作为单独的东西,因为我试图找出哪一个可行(真正的XML具有必须处理的元素和属性的混合)。一旦知道他们正在做什么的人都瞥了一眼,我很确定我会遗漏一些显而易见的东西。
答案 0 :(得分:1)
我希望有 | StoreName | Barnes and Noble |标题|学习 XML |作者| Erik T. Ray
| StoreName | Barnes and Noble |标题| XQuery Kick 开始|作者| James McGovern
如果这是你的目标,你可以简单地使用:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/Bookstores">
<xsl:for-each select="Bookstore/book">
<xsl:text>|StoreName|</xsl:text>
<xsl:value-of select="../Storename"/>
<xsl:text>|Title|</xsl:text>
<xsl:value-of select="title"/>
<xsl:text>|Author|</xsl:text>
<xsl:value-of select="author"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
要获取Storenameattribute
而不是Storename
的值,请使用:
<xsl:value-of select="../@Storenameattribute"/>
而不是:
<xsl:value-of select="../Storename"/>
请注意,这需要格式良好的XML作为输入 - 您向我们展示的不是。