【发布时间】:2012-06-01 06:06:17
【问题描述】:
我正在尝试编写 XSLT 来将我的 XML 从一种格式转换为另一种格式。当我将我的.xslt 文件应用到 VS 2010 中的 XML 文件时,输出 XML 结构的创建没有任何问题。但它没有填写处理xsl:value-of所期望的数据。
当我使用 XMLSpy 并计算 XPath 表达式时,它会为以下 XSLT 中的表达式显示 no result。但是当我在 XPath 表达式的末尾使用 node() 函数时,它会显示值!
- 编写 XPath 的正确方法是什么?
- 是否真的需要
node()和text()之类的函数来读取元素内容(当它没有子元素时)?如果不是,为什么 XmlSpy 在没有这些功能的情况下也不给出结果? - 有时(当我将模板匹配值从“/”更改为“ServiceMessage”时)在调试 XSLT 时,VS 2010 会进入内置模板规则。为什么会这样?如何摆脱 VS 2010 中的内置模板?
我一开始就关注w3school tutorial。我是 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>
【问题讨论】:
-
谢谢@Filburt。更正了错字。
标签: xml visual-studio-2010 xslt xpath