与我的 XSLT 转换匹配错误



我快疯了。我只想在我的 xml 中检索几个值:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
  <SearchDocumentResponse xmlns="http://axa.fr/gedald/2010/11">
     <SearchDocumentResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <DocumentCollection>
           <document>
              <ObjectStore i:nil="true"/>
              <DocId>{1DC43D04-2541-459C-83A7-BA6A761C64B5}</DocId>
              <IndexCollection>
                 <index>
                    <IndexId>P001</IndexId>
                    <Value>OBJ002301</Value>
                 </index>
                 <index>
                    <IndexId>P002</IndexId>
                    <Value>15/11/2013 13:00:00</Value>
                 </index>
              </IndexCollection>
           </document>
        </DocumentCollection>
        <Message i:nil="true"/>
        <NbDocument>7</NbDocument>
        <Result>OK</Result>
     </SearchDocumentResult>
  </SearchDocumentResponse>
</s:Body>
</s:Envelope>

无论我尝试使用 XSL 文件做什么,我都无法访问内容。有时我会得到每个标签内容。但绝不是我想要的。

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="s:Envelope/s:Body/SearchDocumentResponse/SearchDocumentResult/DocumentCollection/document/IndexCollection">
   <html>
     <body>
       <xsl:value-of select="DocId"/>
       <xsl:for-each select="index">
          <ul>
            <li><xsl:value-of select="IndexId"/></li>
            <li><xsl:value-of select="Value"/></li>
          </ul>
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

源文档中的元素位于不同的命名空间中,因此您需要将相同的命名空间 URI 绑定到样式表中的合适前缀,然后在 XPath 表达式中使用这些前缀:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:axa="http://axa.fr/gedald/2010/11">
  <xsl:template match="/">
   <html>
     <body>
       <xsl:apply-templates select="s:Envelope/s:Body/axa:SearchDocumentResponse/axa:SearchDocumentResult/axa:DocumentCollection/axa:document/axa:IndexCollection" />
     </body>
   </html>
  </xsl:template>

  <xsl:template match="axa:IndexCollection">
     <xsl:value-of select="axa:DocId"/>
     <xsl:for-each select="axa:index">
        <ul>
          <li><xsl:value-of select="axa:IndexId"/></li>
          <li><xsl:value-of select="axa:Value"/></li>
        </ul>
     </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

XPath 1.0 表达式中的无前缀名称始终引用不在命名空间中的节点,这就是 DocId 等内容不选择任何内容的原因。

相关内容

  • 没有找到相关文章

最新更新