如果标签没有属性但有内容,我将如何在xslt中将标签更改为属性

时间:2014-03-18 14:50:18

标签: xml xslt rdf

具体而言,我尝试修改的xslt位于此处:http://www.gac-grid.de/project-products/Software/XML2RDF.html

我想要处理的xml就像:

<?xml version="1.0" encoding="UTF-8"?>
<BGSInformation Major="2" Minor="0" Revision="1">
<ListingType>OSR</ListingType>
</BGSInformation>

现在xslt它将ListingType视为一个对象并将其转换为:

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description xmlns:xs="http://www.w3.org/TR/2008/REC-xml-20081126#" rdf:about="">
  <BGSInformation xmlns="#">
     <rdf:Description xmlns="" rdf:about="#BGSInformation">
        <Major xmlns="#">2</Major>
        <Minor xmlns="#">0</Minor>
        <Revision xmlns="#">1</Revision>
        <!-- *** --->
        <ListingType xmlns="#">
           <rdf:Description xmlns="" rdf:about="#BGSInformation/ListingType">
              <rdf:value>OSR</rdf:value>
           </rdf:Description>
        </ListingType>
        <!-- *** --->
     </rdf:Description>
  </BGSInformation>
</rdf:Description>
</rdf:RDF>

我想要做的是检测文档中的ListingType Anywhere没有属性,没有子节点,只有文本,而是转换它,就好像它是BGSInformation的属性一样。即:

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description xmlns:xs="http://www.w3.org/TR/2008/REC-xml-20081126#" rdf:about="">
  <BGSInformation xmlns="#">
     <rdf:Description xmlns="" rdf:about="#BGSInformation">
        <ListingType xmlns="#">OSR</ListingType>
        <Major xmlns="#">2</Major>
        <Minor xmlns="#">0</Minor>
        <Revision xmlns="#">1</Revision>
     </rdf:Description>
  </BGSInformation>
</rdf:Description>
</rdf:RDF>

1 个答案:

答案 0 :(得分:1)

这应该像更改其中一个模板上的匹配表达式一样简单 - 更改:

<xsl:template match="@*" name="attributes">

<xsl:template match="@*|*[not(@*|*)]" name="attributes">

这应该使模板应用于没有属性或子元素的元素,以及属性节点。该模板的内容

<xsl:element name="{name()}" namespace="{$ns}">
  <xsl:value-of select="."/>
</xsl:element>

同样适用于任何一种。