[xslt]xml文件
----------------------------------------------------------------------------------------------------------------------
我如何在xslt中做控制,,,在新生成的xml中和原xml中的一样
(比如 我现在取的只能xsl:value-of取到123455,,而不能完整的取<field001>123455</field001>)
<?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"/>
<xsl:template match="/">
<xsl:copy-of select="/" />
</xsl:template>
</xsl:stylesheet>
----------------------------------------------------------------------------------------------------------------------
在xsl中如何获取一个元素的子元素的名称?
大家好,
在xsl中如何获取一个元素的所有子元素的名称?
例如:
<item>
<http ........./>
<email ........./>
<ftp ........./>
</item>
事先我不知道 <item></item>中有哪些子元素,但是我要根据其出现的子元素的名称来做一些处理,比如,如果出现<http ../>子元素,我就给它加一个url属性;如果出现<email ../>子元素,我就给它加一个mailAddr 属性等等。。。。
现在就是要判断<item></item>中存在了几个子节点,每个子节点的名字是什么。。。。
请问大家,如何获取子节点个数以及其名字啊???????
在xsl中可以用name()返回当前元素节点的名称;计算子节点个数可以用count(../item/*)得到。
xsl大体应该如下:
...
<xsl:for-each select="../item/*"> //选中item下的所有子节点
<xsl:choose>
<xsl:when test=" name() = 'http' ">
<xsl:attribute name="url">
.......
</xsl:attribute>
</xsl:when>
<xsl:when test=" name()='email' ">
<xsl:attribute name="mailAddr">
.......
</xsl:attribute>
</xsl:when>
<xsl:when test=" name()='ftp' ">
<xsl:attribute name="ftpAddr">
.......
</xsl:attribute>
</xsl:when>
<xsl:otherwise>
......
</xsl:otherwise>
......
----------------------------------------------------------------------------------------------------------------------
数据处理的时候, 需要实现类似下面的一个处理:
有一个 xml, 类似下面的结构
<root>
<rr name= "a ">
<rrr> a1 </rrr>
<rrr> a2 </rrr>
<rrr> a3 </rrr>
<rrr> a4 </rrr>
</rr>
<rr name= "b ">
<rrr> b1 </rrr>
<rrr> b2 </rrr>
<rrr> b3 </rrr>
<rrr> b4 </rrr>
</rr>
</root>
需要写一个 xsl 文件, 将其显示为类似这样的效果:
- Libary: a
value: a1 (/root/rr[1]/rrr[1])
value: a2 (/root/rr[1]/rrr[2])
value: a3 (/root/rr[1]/rrr[3])
value: a4 (/root/rr[1]/rrr[4])
- Libary: b
value: b1 (/root/rr[2]/rrr[1])
value: b2 (/root/rr[2]/rrr[2])
value: b3 (/root/rr[2]/rrr[3])
value: b4 (/root/rr[2]/rrr[4])
对于显示成如上格式来说, 用 xsl 可以很容易的实现, 但有如下两个需求不知道如何实现:
1. 对于 Libary, 需要可以实现折叠的效果, 即默认情况下, 是不 Value 数据的, 仅显示为:
+ Libary: a
+ Libary: b
只有单击 + 号才显示出 value 的数据
2. 对于每个 value, 其后面的: (/root/rr[2]/rrr[1])
这样的信息是该 value 对应于 xml 数据的 xpath, 通过这个 xpath, 可以唯一定位到这个 value. 并且需要显示为 value 的超链接接, 该超链接接的URL即为 xpath(即显示的时间, value 项中, 括号部分的值是为显示的, 仅仅是 value 各值上有一个超链接, 超链接的 URL 地址为 xpth(括号中显示的内容))
注: 因为需求的限制, 所以如果涉及到脚本, 则仅限 java 脚本, 而且是嵌入在 xsl 文件中的。
实际应用的 xml 远比示例的复杂, 所以层次不是固定的 /root/rr/rrr
最好能够直接根据当前解析到的结点推导出其 xpath。
<?xml version= "1.0 "?>
<xsl:stylesheet version= "1.0 " xmlns:xsl= "http://www.w3.org/1999/XSL/Transform ">
<xsl:output method= "html " encoding= "gb2312 " omit-xml-declaration= "yes "/>
<xsl:template match= "/ ">
<html>
<head>
<title> </title>
<script type= "text/javascript " language= "javascript ">
<![CDATA[
function btnOnClick(obj) {
if(obj.innerText== "+ ") {
theChild=obj.parentElement.nextSibling;
theChild.style.display= " ";
obj.innerText= "- ";
}
else {
theChild=obj.parentElement.nextSibling;
theChild.style.display= "none ";
obj.innerText= "+ ";
}
}
]]>
</script>
</head>
<body>
<xsl:apply-templates select= "root/* " />
</body>
</html>
</xsl:template>
<xsl:template match= "* ">
<xsl:param name= "parentXpath "> /root </xsl:param>
<xsl:variable name= "name " select= "name() "/>
<xsl:variable name= "currXpath "> <xsl:value-of select= "$parentXpath "/> / <xsl:value-of select= "name() "/> [ <xsl:value-of select= "count(preceding-sibling::*[name()=$name])+1 "/> ] </xsl:variable>
<div style= "margin: 3px 3px 6px 6px;
padding: 1px 1px 1px 5px;
vertical-align: top;
border-bottom: 1px outset #999999;
border-left: 1px dotted #999999; ">
<xsl:if test= "* ">
<div> <span id= " " onclick= "btnOnClick(this) " style= "cursor: pointer; "> + </span> Libary: <xsl:value-of select= "@name "/> </div>
<div style= "display: none; ">
<xsl:apply-templates>
<xsl:with-param name= "parentXpath " select= "$currXpath "/>
</xsl:apply-templates>
</div>
</xsl:if>
<xsl:if test= "not(*) ">
<div style= "margin-left: 5px ">
value: <xsl:value-of select= ". "/> ( <xsl:value-of select= "$currXpath "/> )
</div>
</xsl:if>
</div>
</xsl:template>
</xsl:stylesheet>
分享到:
相关推荐
同时,"DIXml.chm"是组件的帮助文件,包含了详细的API参考和使用指南。 6. **源码开放**:"Source"目录包含了DIXML组件的源代码,这为开发者提供了深入学习和定制的机会。通过查看源码,开发者可以了解其实现原理,...
例如,模板中可能有一个占位符“{orderNO}”,在实际转换时,它会被XML文件中的元素值替换。 接下来,我们需要构建XML数据结构,以匹配我们的Word模板。在这个例子中,XML数据描述了一个订单,包括订单号、创建日期...
在"javascript_xslt_show_xml"这个示例中,我们可能首先会加载XML文件到内存中,然后创建一个XSLT处理器。接下来,我们将XSL样式表应用到XML文档上,通过处理器生成一个新的文档对象。最后,我们可以将这个新生成的...
在文件“xslt2”中,可能包含了一个或多个XSLT样式表,用于转换特定的XML文件。开发者可以将这些样式表集成到ASP.NET应用程序中,通过代码调用XslCompiledTransform类的方法来执行转换,将生成的HTML或其他格式返回...
最后,我们将使用 JavaScript 语言来将 XML 文档和 XSLT 文件加载到 HTML 文档中,并将其转换成 HTML 文档。 使用 XSLT 实现 XML 文档到 HTML 文档的转换 function xslt(){ var XMLdocument1 = new ...
【实验3XML文件映射与转换(使用XSLT和XPath)】 实验主要涉及XML、XSLT和XPath这三个核心技术,它们在数据处理和信息展示中扮演着重要角色。 XML(Extensible Markup Language)是一种标记语言,用于描述数据结构...
- 使用`java.io.File`或者`java.nio.file.Paths`读取XML源文件和XSLT样式表文件。 - 创建`javax.xml.transform.Source`对象,分别表示XML源和XSLT样式表。 3. 创建转换器: - 实例化`javax.xml.transform....
在Visual Studio(VS)中,XML文件操作是一个重要的开发任务,尤其对于处理数据存储、配置文件、序列化或数据交换等场景。XML(eXtensible Markup Language)是一种标记语言,它提供了结构化的数据表示方式,易于...
例如,一个可能的测试用例是有一个XML文件包含了书籍目录,而XSLT样式表的任务就是将这些书籍信息转化为HTML表格或者列表。 在实际应用中,我们可以使用XSLT工具或库,如Saxon、Xalan或libxslt,来执行转换操作。在...
3. **加载XML文件和XSLT文件**:使用XMLDOM对象加载XML文件,并设置XSLTemplate对象的样式表为XSLT文件。 4. **执行转换操作**:利用XSLTemplate对象提供的方法`transform`完成XML文件到目标格式的转换。 #### 具体...
根据提供的ABAP程序片段,我们可以总结出以下关于生成XML文件的相关知识点: ### 1. ABAP中的IXML库介绍 ABAP(Advanced Business Application Programming)是SAP系统中广泛使用的一种编程语言。在处理XML数据时...
`XMLFileUtil.java`可能包含了一些与XML文件I/O相关的功能,比如读取XML文件到字符串,或将字符串写入XML文件。在Java中,这通常涉及到`java.io`和`javax.xml.transform`这两个包。例如,使用`java.io....
在建站中,XML文件可以用来存储页面布局、内容和元数据,使得数据与表现分离,让内容更易于管理和维护。同时,XML的结构清晰,便于机器解析,有助于实现自动化处理和跨平台兼容。 XSLT(XSL Transformations)是...
在处理XML文件时,通常涉及的主要操作包括创建、读取、修改和保存。下面将详细阐述这些知识点。 一、创建XML文件 创建XML文件首先需要遵循XML的基本语法规则,如声明文档类型(`<?xml version="1.0" encoding="UTF-...
在这个例子中,`input.xml` 是要转换的XML文件,`transform.xsl` 是定义转换规则的XSLT样式表,而 `output.xml` 将保存转换后的结果。`setOutputProperty()` 方法用于设置输出格式,如是否缩进和缩进量。 在实际...
将XML文档和XSLT文件提供给这些工具,它们会生成转换后的HTML。 XSLT的强大之处在于其灵活性和表达力,它允许开发者以声明式的方式处理XML数据,而无需编写复杂的解析逻辑。在实际开发中,XSLT常用于数据交换、报表...
这个过程包括加载XML文档,加载XSLT样式表,然后执行转换,最后将结果输出为字符串或写入文件。这种方法在服务器端处理XML数据时非常有用,例如,可以根据用户请求动态生成定制化的HTML响应,或者在服务器端预处理...
5. **处理XML文件**:生成的XML文件可以用任何XML编辑器或编程语言(如Python、Java、C#等)进一步处理。例如,可以使用XPath查询语言来提取特定数据,或者使用XSLT转换语言将XML转换成其他格式。 6. **测试和验证*...
在"XSLT解释XML实例"这个压缩包中,可能包含了一个或多个XML文件和相应的XSLT文件。通过将XML文件输入到XSLT处理器(如Saxon、Xalan等),可以查看转换后的结果。这个过程可能包括创建简单的HTML输出,或者进行更...