`

[xslt]xml文件

 
阅读更多

[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>

 

 

 

 

 

 

分享到:
评论

相关推荐

    Delphi下最好用的XML/XSLT组件DIXML最新版本无需密码效率超高

    同时,"DIXml.chm"是组件的帮助文件,包含了详细的API参考和使用指南。 6. **源码开放**:"Source"目录包含了DIXML组件的源代码,这为开发者提供了深入学习和定制的机会。通过查看源码,开发者可以了解其实现原理,...

    使用xslt转化xml数据形成word文档导出

    例如,模板中可能有一个占位符“{orderNO}”,在实际转换时,它会被XML文件中的元素值替换。 接下来,我们需要构建XML数据结构,以匹配我们的Word模板。在这个例子中,XML数据描述了一个订单,包括订单号、创建日期...

    用javascript以xslt显示xml_demo

    在"javascript_xslt_show_xml"这个示例中,我们可能首先会加载XML文件到内存中,然后创建一个XSLT处理器。接下来,我们将XSL样式表应用到XML文档上,通过处理器生成一个新的文档对象。最后,我们可以将这个新生成的...

    asp.net xslt xml

    在文件“xslt2”中,可能包含了一个或多个XSLT样式表,用于转换特定的XML文件。开发者可以将这些样式表集成到ASP.NET应用程序中,通过代码调用XslCompiledTransform类的方法来执行转换,将生成的HTML或其他格式返回...

    使用XSLT将XML文档转换成HTML文档

    最后,我们将使用 JavaScript 语言来将 XML 文档和 XSLT 文件加载到 HTML 文档中,并将其转换成 HTML 文档。 使用 XSLT 实现 XML 文档到 HTML 文档的转换 function xslt(){ var XMLdocument1 = new ...

    实验3XML文件映射与转换(使用XSLT和XPath)

    【实验3XML文件映射与转换(使用XSLT和XPath)】 实验主要涉及XML、XSLT和XPath这三个核心技术,它们在数据处理和信息展示中扮演着重要角色。 XML(Extensible Markup Language)是一种标记语言,用于描述数据结构...

    java中使用xslt转换xml成为另一个xml

    - 使用`java.io.File`或者`java.nio.file.Paths`读取XML源文件和XSLT样式表文件。 - 创建`javax.xml.transform.Source`对象,分别表示XML源和XSLT样式表。 3. 创建转换器: - 实例化`javax.xml.transform....

    VS之XML文件操作

    在Visual Studio(VS)中,XML文件操作是一个重要的开发任务,尤其对于处理数据存储、配置文件、序列化或数据交换等场景。XML(eXtensible Markup Language)是一种标记语言,它提供了结构化的数据表示方式,易于...

    xslt_xml_html 测试

    例如,一个可能的测试用例是有一个XML文件包含了书籍目录,而XSLT样式表的任务就是将这些书籍信息转化为HTML表格或者列表。 在实际应用中,我们可以使用XSLT工具或库,如Saxon、Xalan或libxslt,来执行转换操作。在...

    ASP处理XSLT转换XML的实现

    3. **加载XML文件和XSLT文件**:使用XMLDOM对象加载XML文件,并设置XSLTemplate对象的样式表为XSLT文件。 4. **执行转换操作**:利用XSLTemplate对象提供的方法`transform`完成XML文件到目标格式的转换。 #### 具体...

    生成XML文件ABAP程序

    根据提供的ABAP程序片段,我们可以总结出以下关于生成XML文件的相关知识点: ### 1. ABAP中的IXML库介绍 ABAP(Advanced Business Application Programming)是SAP系统中广泛使用的一种编程语言。在处理XML数据时...

    格式化xml字符串,并生成xml文件

    `XMLFileUtil.java`可能包含了一些与XML文件I/O相关的功能,比如读取XML文件到字符串,或将字符串写入XML文件。在Java中,这通常涉及到`java.io`和`javax.xml.transform`这两个包。例如,使用`java.io....

    xslt+xml+jquery建站

    在建站中,XML文件可以用来存储页面布局、内容和元数据,使得数据与表现分离,让内容更易于管理和维护。同时,XML的结构清晰,便于机器解析,有助于实现自动化处理和跨平台兼容。 XSLT(XSL Transformations)是...

    操作xml文件_保存xml文件_操作XML_

    在处理XML文件时,通常涉及的主要操作包括创建、读取、修改和保存。下面将详细阐述这些知识点。 一、创建XML文件 创建XML文件首先需要遵循XML的基本语法规则,如声明文档类型(`&lt;?xml version="1.0" encoding="UTF-...

    java_xslt转换xml

    在这个例子中,`input.xml` 是要转换的XML文件,`transform.xsl` 是定义转换规则的XSLT样式表,而 `output.xml` 将保存转换后的结果。`setOutputProperty()` 方法用于设置输出格式,如是否缩进和缩进量。 在实际...

    xslt总结及使用xslt将xml显示的例子

    将XML文档和XSLT文件提供给这些工具,它们会生成转换后的HTML。 XSLT的强大之处在于其灵活性和表达力,它允许开发者以声明式的方式处理XML数据,而无需编写复杂的解析逻辑。在实际开发中,XSLT常用于数据交换、报表...

    xslt控制xml样式并被html、c#后台调用

    这个过程包括加载XML文档,加载XSLT样式表,然后执行转换,最后将结果输出为字符串或写入文件。这种方法在服务器端处理XML数据时非常有用,例如,可以根据用户请求动态生成定制化的HTML响应,或者在服务器端预处理...

    excel读取生成xml文件

    5. **处理XML文件**:生成的XML文件可以用任何XML编辑器或编程语言(如Python、Java、C#等)进一步处理。例如,可以使用XPath查询语言来提取特定数据,或者使用XSLT转换语言将XML转换成其他格式。 6. **测试和验证*...

    XSLT解释XML实例

    在"XSLT解释XML实例"这个压缩包中,可能包含了一个或多个XML文件和相应的XSLT文件。通过将XML文件输入到XSLT处理器(如Saxon、Xalan等),可以查看转换后的结果。这个过程可能包括创建简单的HTML输出,或者进行更...

Global site tag (gtag.js) - Google Analytics