我正在尝试编写 XSLT 将我的 XML 从一种格式转换为另一种格式。当我将我.xslt
的文件应用到 VS 2010 中的 XML 文件时,可以毫无问题地创建输出 XML 结构。但它没有填写处理所期望的数据xsl:value-of
。
当我使用XMLSpy
和评估XPath
表达式时,它表示no result
以下 XSLT 中的表达式。但是当我node()
在 XPath 表达式的末尾使用函数时,它会显示值!
- 编写 XPath 的正确方法是什么?
- 每次读取元素内容(当它没有子元素时)是否真的需要某种
node()
功能?text()
如果不是,为什么 XmlSpy 在没有这些功能的情况下也不会给出结果? - 有时(当我将模板匹配值从“/”更改为“ServiceMessage”时)在调试 XSLT 时,VS 2010 会进入内置模板规则。为什么会这样?如何摆脱 VS 2010 中的内置模板?
我一开始就遵循w3school 教程。我是 XSLT 的新手。
这是我想要转换为其他 XML 格式的 XML。
<ServiceMessage xmlns="http://requestservice/requests" xmlns:req="http://requestservice/requests/xmlstds">
<TypeOfReq> General </TypeOfReq>
<Details>
<Id> 123456789 </Id>
<SenderDetails>
<Sender id="345"></Sender>
</SenderDetails>
</Details>
</ServiceMessage>
这是我的 XSLT
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<request>
<requestType>
<xsl:value-of select="ServiceMessage/TypeOfReq" />
</requestType>
<Id>
<xsl:value-of select="ServiceMessage/Details/Id"/>
</Id>
<senderId>
<xsl:value-of select="ServiceMessage/Details/SenderDetails/Sender/@id"/>
</senderId>
</request>
</xsl:template>
</xsl:stylesheet>