具体而言,我尝试修改的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>
答案 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>
同样适用于任何一种。