如何 select XML 中的属性值并将其与字符串连接并使用 XSLT 将其用作新 XML 中的属性值
How to select an attribute value in an XML and concatenate it with a string and use it as an attribute value in a new XML using XSLT
我需要使用 XSLT 将现有 XML 转换为另一个 XML。
我面临的问题是我需要使用 ECClass 中的 "typeName" 属性并将其与 http://www.semanticweb.org/aman.prasad/ontologies/2015/5/untitled-ontology-1#
连接起来
我正在使用的 XML 是 -
<ECSchema>
<ECClass typeName="ABC">
<BaseClass>PQR</BaseClass>
<BaseClass>XYZ</BaseClass>
</ECClass>
<ECClass typeName="IJK">
<BaseClass>MNO</BaseClass>
<BaseClass>DEF</BaseClass>
</ECClass>
<ECSchema>
例如,连接的结果应该是 -
http://www.semanticweb.org/aman.prasad/ontologies/2015/5/untitled-ontology-1#ABC 第一个 ECClass
我需要在新的XML结构中的owl:class标签中将这个字符串设置为rdf:about的属性值。
新的XML结构是-
<owl:ontology rdf:about="http://www.semanticweb.org/aman.prasad/ontologies/2015/5/untitled-ontology-1">
<owl:class rdf:about="http://www.semanticweb.org/aman.prasad/ontologies/2015/5/untitled-ontology-1#ABC">
</owl:class>
<owl:class rdf:about="http://www.semanticweb.org/aman.prasad/ontologies/2015/5/untitled-ontology-1#ABC">
</owl:class>
</owl:ontology>
现在我还没有尝试对 BaseClass 做任何事情。我只是试图将 ECCLass 转换为 owl:class.
它的 XSL 是 -
<xsl:template match="/">
<owl:Ontology rdf:about="http://www.semanticweb.org/aman.prasad/ontologies/2015/5/untitled-ontology-1"/>
<xsl:for-each select="ECSchema/ECClass">
<owl:class rdf:about="<xsl:value-of select="concat('http://www.semanticweb.org/aman.prasad/ontologies/2015/5/untitled-ontology-1#' , '@typeName') />" >
</owl:class>
</xsl:for-each>
</xsl:template>
我一直在尝试多种组合来从各种来源做到这一点,但一直无法做到。
它总是 returns 一个错误 - “附加信息:'<',十六进制值 0x3C,是一个无效的属性字符。”
任何人都可以帮我解决这个问题,因为我对 XSLT 还很陌生,而且我得到的只是很多错误。
标签不能嵌套。为了达到你的目的,你应该了解attribute value templates。此外,您的代码相当草率。试试这个方法:
<xsl:template match="/">
<owl:Ontology rdf:about="http://www.semanticweb.org/aman.prasad/ontologies/2015/5/untitled-ontology-1">
<xsl:for-each select="ECSchema/ECClass">
<owl:class rdf:about="{concat('http://www.semanticweb.org/aman.prasad/ontologies/2015/5/untitled-ontology-1#', @typeName)}" />
</xsl:for-each>
</owl:Ontology>
</xsl:template>
或者更优雅一点:
<xsl:variable name="myURL">http://www.semanticweb.org/aman.prasad/ontologies/2015/5/untitled-ontology-1</xsl:variable>
<xsl:template match="/">
<owl:Ontology rdf:about="{$myURL}">
<xsl:for-each select="ECSchema/ECClass">
<owl:class rdf:about="{$myURL}#{@typeName}" />
</xsl:for-each>
</owl:Ontology>
</xsl:template>
我需要使用 XSLT 将现有 XML 转换为另一个 XML。
我面临的问题是我需要使用 ECClass 中的 "typeName" 属性并将其与 http://www.semanticweb.org/aman.prasad/ontologies/2015/5/untitled-ontology-1#
连接起来我正在使用的 XML 是 -
<ECSchema>
<ECClass typeName="ABC">
<BaseClass>PQR</BaseClass>
<BaseClass>XYZ</BaseClass>
</ECClass>
<ECClass typeName="IJK">
<BaseClass>MNO</BaseClass>
<BaseClass>DEF</BaseClass>
</ECClass>
<ECSchema>
例如,连接的结果应该是 -
http://www.semanticweb.org/aman.prasad/ontologies/2015/5/untitled-ontology-1#ABC 第一个 ECClass
我需要在新的XML结构中的owl:class标签中将这个字符串设置为rdf:about的属性值。
新的XML结构是-
<owl:ontology rdf:about="http://www.semanticweb.org/aman.prasad/ontologies/2015/5/untitled-ontology-1">
<owl:class rdf:about="http://www.semanticweb.org/aman.prasad/ontologies/2015/5/untitled-ontology-1#ABC">
</owl:class>
<owl:class rdf:about="http://www.semanticweb.org/aman.prasad/ontologies/2015/5/untitled-ontology-1#ABC">
</owl:class>
</owl:ontology>
现在我还没有尝试对 BaseClass 做任何事情。我只是试图将 ECCLass 转换为 owl:class.
它的 XSL 是 -
<xsl:template match="/">
<owl:Ontology rdf:about="http://www.semanticweb.org/aman.prasad/ontologies/2015/5/untitled-ontology-1"/>
<xsl:for-each select="ECSchema/ECClass">
<owl:class rdf:about="<xsl:value-of select="concat('http://www.semanticweb.org/aman.prasad/ontologies/2015/5/untitled-ontology-1#' , '@typeName') />" >
</owl:class>
</xsl:for-each>
</xsl:template>
我一直在尝试多种组合来从各种来源做到这一点,但一直无法做到。
它总是 returns 一个错误 - “附加信息:'<',十六进制值 0x3C,是一个无效的属性字符。”
任何人都可以帮我解决这个问题,因为我对 XSLT 还很陌生,而且我得到的只是很多错误。
标签不能嵌套。为了达到你的目的,你应该了解attribute value templates。此外,您的代码相当草率。试试这个方法:
<xsl:template match="/">
<owl:Ontology rdf:about="http://www.semanticweb.org/aman.prasad/ontologies/2015/5/untitled-ontology-1">
<xsl:for-each select="ECSchema/ECClass">
<owl:class rdf:about="{concat('http://www.semanticweb.org/aman.prasad/ontologies/2015/5/untitled-ontology-1#', @typeName)}" />
</xsl:for-each>
</owl:Ontology>
</xsl:template>
或者更优雅一点:
<xsl:variable name="myURL">http://www.semanticweb.org/aman.prasad/ontologies/2015/5/untitled-ontology-1</xsl:variable>
<xsl:template match="/">
<owl:Ontology rdf:about="{$myURL}">
<xsl:for-each select="ECSchema/ECClass">
<owl:class rdf:about="{$myURL}#{@typeName}" />
</xsl:for-each>
</owl:Ontology>
</xsl:template>