我遇到了一些可能很难解决但却没有线索的事情。
我的XML数据如下: -
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="GetTicketCategories.xsl"?>
<ArrayOfCategory xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://test.com/test/">
<Category>
<Name>Benefits</Name>
<Count>29</Count>
</Category>
<Category>
<Name>Building Control</Name>
<Count>4</Count>
</Category>
</ArrayOfCategory>
XSL文件: -
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="Category">
<xsl:value-of select="Name"/>
<xsl:text>, </xsl:text>
<xsl:value-of select="Count"/>
<xsl:text>, </xsl:text>
</xsl:template>
</xsl:stylesheet>
输出结果为: -
Benefits29Building Control4
顶级元素似乎存在问题,它不喜欢其格式,例如<ArrayOfCategory xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://ctronix.com/smartticketservice/">
我无法更改xml,但如果我简化代码,它的工作原理如下: -
更改了XML: -
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="GetTicketCategories.xsl"?>
<ArrayOfCategory>
<Category>
<Name>Benefits</Name>
<Count>29</Count>
</Category>
<Category>
<Name>Building Control</Name>
<Count>4</Count>
</Category>
</ArrayOfCategory>
XSL: -
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="ArrayOfCategory/Category">
<xsl:value-of select="Name"/>
<xsl:text>, </xsl:text>
<xsl:value-of select="Count"/>
<xsl:text>, </xsl:text>
</xsl:template>
</xsl:stylesheet>
正确输出: -
Benefits, 29, Building Control, 4,
那么如何使用现有的XML文件获取所需的输出?我不知道如何使用
<ArrayOfCategory xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://ctronix.com/smartticketservice/">
在模板匹配部分。
我必须承认我是一个完全的初学者;任何帮助都将非常感激。
干杯
富
答案 0 :(得分:0)
您发布的第一个XSL模板似乎与任何内容都不匹配,因此默认输出所有文本元素。
您需要更改模板匹配 - 使用/ArrayOfCategory/Category
,转换为“从xml的根目录,选择所有ArrayOfCategory / Category”:
<?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="text"/>
<xsl:template match="/ArrayOfCategory/Category">
<xsl:value-of select="Name"/>
<xsl:text>, </xsl:text>
<xsl:value-of select="Count"/>
<xsl:text>, </xsl:text>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
您必须在XML中使用的XSL命名空间中引用。检查这个XSL:
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:t="http://test.com/test/"> <xsl:output method="text"/> <xsl:template match="t:ArrayOfCategory/t:Category"> <xsl:value-of select="t:Name"/> <xsl:text>,</xsl:text> <xsl:value-of select="t:Count"/> <xsl:text>,</xsl:text> </xsl:template> </xsl:stylesheet>
使用此XML:
<?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="GetTicketCategories.xsl"?> <ArrayOfCategory xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://test.com/test/"> <Category> <Name>Benefits</Name> <Count>29</Count> </Category> <Category> <Name>Building Control</Name> <Count>4</Count> </Category> </ArrayOfCategory>
结果:
Benefits,29,Building Control,4,