我快疯了。我只想在我的 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
等内容不选择任何内容的原因。