XSL帮助创建逗号分隔的XML

时间:2010-02-24 10:46:29

标签: xml

我遇到了一些可能很难解决但却没有线索的事情。

我的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/">

在模板匹配部分。

我必须承认我是一个完全的初学者;任何帮助都将非常感激。

干杯

2 个答案:

答案 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,