【问题标题】:Using XSLT to Transform into XML使用 XSLT 转换为 XML
【发布时间】:2018-08-26 23:45:03
【问题描述】:

试图弄清楚为什么这不起作用。我已按照W3Schools XSLT DocsW3Schools XPath Docs 上的说明进行操作,并且我不断将“MeterInfo”标签的“MeterNo”值设为空。

XSLT

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
                exclude-result-prefixes="msxsl">

<xsl:template match="/">
  <MeterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <MeterNo>
      <xsl:value-of select="Template[@name='MyTemplateName']/Field[@name='MyFieldName']"/>
    </MeterNo>
  </MeterInfo>
</xsl:template>

XML

<?xml version="1.0" encoding="utf-8"?>
<ProcessHostRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                    xmlns="http://www.utilitysolutions.cgi.com/UHIB-1_0">
   <DataArea>
      <Process xmlns="http://www.openapplications.org/oagis" />
      <HostRequest>
         <Template name="MyTemplateName">
            <Field name="MyFieldName">
               8768565
            </Field>
         </Template>
      </HostRequest>
   </DataArea>
</ProcessHostRequest>

我的转型回应

<?xml version="1.0" encoding="UTF-8"?>
<MeterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <MeterNo/>
</MeterInfo>

【问题讨论】:

    标签: xml xslt xpath


    【解决方案1】:

    两个错误:

    首先在您的模板中匹配模式/ 上下文节点是根节点。 如果文档节点的名称为 Template 但它是 ProcessHostRequest,则表达式 select="Template[..." 只会返回非空结果。

    因此匹配后代:select="//Template...

    第二个TemplateField 元素位于命名空间http://www.utilitysolutions.cgi.com/UHIB-1_0 中。要选择它们,您需要在 XSLT 中声明相同的命名空间:

    <xsl:stylesheet version="1.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
                xmlns:c="http://www.utilitysolutions.cgi.com/UHIB-1_0"
                exclude-result-prefixes="msxsl c">
    

    并相应地使用它

    <xsl:value-of select="//c:Template[@name='MyTemplateName']/c:Field[@name='MyFieldName']"/>
    

    【讨论】:

      猜你喜欢
      • 2016-08-24
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多