【发布时间】:2015-10-07 08:49:55
【问题描述】:
我对此表示歉意,因为周围有类似的问题,但是我尝试应用所有这些问题,但无法让我的工作与现有的样式表 html 输出一起工作。
我有一个现有的 XML 和一个现有的具有 HTML 标记的 XSLT。
我只想使用 XSLT 将属性添加到我的 XML 根节点,但仍输出 XSLT HTML。
我该怎么做?
我的XML:(我想给节点添加一个xmlns属性:“StockList”)
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="do_it.xsl"?>
<StockList>
<StockItem>
<Item>AX123</Item>
<Description>Firetruck</Description>
<Count>500</Count>
<Order>No</Order>
</StockItem>
</StockList>
我的 XSLT:(do_it.xsl)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:aa="http://www.w3schools.com/MMMXXX">
<xsl:template match="/">
<html>
<body>
<h2>Things On The Shelf:</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Item Code</th>
<th style="text-align:left">Item Description</th>
<th style="text-align:left">Current Count</th>
<th style="text-align:left">On Order?</th>
</tr>
<xsl:for-each select="aa:StockList/aa:StockItem">
<tr>
<td><xsl:value-of select="aa:Item"/></td>
<td><xsl:value-of select="aa:Description"/></td>
<td><xsl:value-of select="aa:Count"/></td>
<td><xsl:value-of select="aa:Order"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
那么我需要对我的 XSLT 做些什么?我需要在哪里做呢?我尝试了大约 15 种不同的“应用模板”,但是当我设法添加属性时,我不能也添加我的 html 表? :(
请帮忙。
【问题讨论】:
-
单个 XSLT (1.0) 样式表创建一个可以序列化为 HTML、XML 或纯文本的结果树。让单个 XSLT 1.0 样式表创建一些 HTML 以及一些可操作的 XML 是不可能的。在 XSLT/XPath 数据模型中,
xmlns“属性”甚至不被视为属性,它是一个命名空间声明。所以我不确定我是否理解您想要实现的目标,您可能想要编辑您的问题并显示您想要创建的输出。 -
基本上,除了我的 html 表之外,我只想要 StockList 的命名空间声明。从你的解释看来这是不可能的。 :s 我没有从 C# 声明它的原因是因为它是一个使用 writexml 来自动化输出的数据集。你不能在那一端附加一个根命名空间,所以我想我可以用 XLST 来做。
-
如果您使用 C# 通过“writexml”生成 XML,您可以创建一些额外的 C# 来更改 XML 中所有元素的命名空间,然后再将其发送出去。例如,请参阅msdn.microsoft.com/en-gb/library/bb943914.aspx。
标签: html xml xslt attributes root