XSL新手求助:如何从XML中提取目标元素(附XSLT代码片段)
针对XSLT提取XML目标元素的新手指南
嘿,作为XSL新手,命名空间绝对是最容易踩坑的第一关!看你给出的XSLT 1.0代码片段里已经声明了命名空间,但要成功提取目标元素,核心是正确在XPath中使用命名空间前缀。
核心问题:命名空间的正确使用
你的代码里声明了两个指向同一命名空间的前缀:cr和d1p1,对应的命名空间是com/truelink/ds/sch/report/truelink/v3。这意味着你的XML里的目标元素大概率是属于这个命名空间的——但XSLT默认只会匹配没有命名空间的元素,所以直接写//TargetElement是找不到内容的,必须带上前缀,比如//cr:TargetElement。
举个实际例子
假设你的XML结构是这样的:
<cr:CreditReport xmlns:cr="com/truelink/ds/sch/report/truelink/v3"> <cr:Account> <cr:AccountNumber>123456</cr:AccountNumber> <cr:Balance>5000</cr:Balance> </cr:Account> </cr:CreditReport>
那你要提取AccountNumber和Balance的话,XSLT可以这么写(基于你已有的代码框架):
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:cr="com/truelink/ds/sch/report/truelink/v3"> <xsl:output method="html" indent="yes"/> <xsl:param name="IS_SAMPLE" select="'false'"/> <xsl:param name="IS_PRINT_VIEW" select="'false'"/> <!-- 匹配XML根节点 --> <xsl:template match="/"> <html> <body> <h3>账户信息</h3> <ul> <li>账号:<xsl:value-of select="cr:CreditReport/cr:Account/cr:AccountNumber"/></li> <li>余额:<xsl:value-of select="cr:CreditReport/cr:Account/cr:Balance"/></li> </ul> </body> </html> </xsl:template> </xsl:stylesheet>
新手调试小技巧
- 如果你不确定元素的具体路径,可以用
//cr:*来列出该命名空间下的所有元素,快速排查结构:<xsl:for-each select="//cr:*"> <p>元素名:<xsl:value-of select="local-name()"/></p> </xsl:for-each> - 建议只保留一个命名空间前缀(比如删掉
d1p1),避免代码混淆 - 确认XML根元素的
xmlns属性和你XSLT里声明的命名空间完全一致(大小写、字符都不能错)
内容的提问来源于stack exchange,提问作者user3234318
相关产品推荐
相关产品推荐

