是否可以使用单个xsl应用于具有不同根元素和选择元素的多个XML?请指教。 原始的xml-1:
<employees>
<employee>
<name>ABC</name>
<id>123</id>
<dept>sales</dept>
<city>XYZ</city>
</employee>
</employees>
的xsl:
<xsl:template match="employees">
<xsl:element name="doc">
<xsl:for-each select="employee">
<xsl:element name="set">
<xsl:element name="field">
<xsl:attribute name="name">Name</xsl:attribute>
<xsl:value-of select="name"/>
</xsl:element>
<xsl:element name="field">
<xsl:attribute name="name">Id</xsl:attribute>
<xsl:value-of select="id"/>
</xsl:element>
<xsl:element name="field">
<xsl:attribute name="name">Department</xsl:attribute>
<xsl:value-of select="dept"/>
</xsl:element>
<xsl:element name="field">
<xsl:attribute name="name">City</xsl:attribute>
<xsl:value-of select="city"/>
</xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
这会产生输出:
<doc>
<set>
<field name="Name">ABC</field>
<field name="Id">123</field>
<field name="Department">sales</field>
<field name="City">XYZ</field>
</set>
</doc>
我想使用相同的xsl来转换下面的xml。
<customers>
<customer>
<name>DEF</name>
<id>456</id>
<city>DEF</city>
</customer>
</customers>
我尝试使用变量并在运行时通过java程序设置root元素和for-each select元素。但它给出了错误。
<xsl:variable name="rootElement"></xsl:variable>
<xsl:variable name="subElement"></xsl:variable>
<xsl:template match="$rootElement">
<xsl:element name="set">
<xsl:for-each select="$subElement">
错误:
FATAL ERROR: 'line 4: Error parsing XPath expression '$rootElement'.'
javax.xml.transform.TransformerConfigurationException: line 4: Error parsing XPath expression '$rootElement'.
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(Unknown Source)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTransformer(Unknown Source)
任何人都可以建议。感谢。
答案 0 :(得分:0)
您可以使用<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="employees|customers">
<xsl:element name="doc">
<xsl:for-each select="employee|customer">
<set>
<field name="Name">
<xsl:value-of select="name"/>
</field>
<field name="Id">
<xsl:value-of select="id"/>
</field>
<xsl:if test="dept">
<field name="Department">
<xsl:value-of select="dept"/>
</field>
</xsl:if>
<field name="City">
<xsl:value-of select="city"/>
</field>
</set>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
运算符。像
element = driver.find_element :id => "gmail-sign-in"
element.click
element = driver.find_element :id => "Email"
element.send_keys "exampletestemail2903@gmail.com"
input = wait.until {
element = driver.find_element :id => "Email"
element if element.displayed?
}
input.send_keys("exampletestemail2903@gmail.com")
if input.text == "exampletestemail2903@gmail.com"
puts 'Correct Input'
else
puts 'Wong Input'
end
答案 1 :(得分:0)
考虑以下通用版本,没有员工或客户的参考,但将模板与根的子项匹配:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output version="1.0" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:element name="doc">
<xsl:apply-templates select="*"/>
</xsl:element>
</xsl:template>
<xsl:template match="/*/*">
<xsl:element name="set">
<xsl:element name="field">
<xsl:attribute name="name">Name</xsl:attribute>
<xsl:value-of select="name"/>
</xsl:element>
<xsl:element name="field">
<xsl:attribute name="name">Id</xsl:attribute>
<xsl:value-of select="id"/>
</xsl:element>
<xsl:element name="field">
<xsl:attribute name="name">Department</xsl:attribute>
<xsl:value-of select="dept"/>
</xsl:element>
<xsl:element name="field">
<xsl:attribute name="name">City</xsl:attribute>
<xsl:value-of select="city"/>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:transform>