Tag: xslt

使用java或xslt基于xml的内容拆分xml

我有一个要求,考虑下面的xml数据Input1.xml ABCDEFGHIJKLMN RESPONSEDATA OPQRSTUVWXYZ NEXTDATA ALPHABETS SOMEDATA 现在我想要3个输出xmls,响应如文件名所示,前面6个字符的ABCDEFGHIJKLMN作为输出文件名,如下图所示 (FILE1)->ABCDEF.XML RESPONSEDATA (FILE2)->OPQRST.XML NEXTDATA (FILE3)->ALPHAB.XML SOMEDATA

基于动态正则表达式的XPath搜索

我有一个类似下面的XML: AMA* AMAZON EBAY * 我想查询并找出与提供的输入匹配的所有设计。 如果我指定EBAY我希望xpath返回节点名称= DEST3和DEST4(它不关心值)但是如果我指定AMAZON它需要返回DEST1,DEST2和DEST4作为AMA *在DEST1中支持通配符。 到目前为止,我的XPath看起来像这样: /目的地[(From =” ‘或From =’*’))] / @ name 如果指定了input,则动态创建XPATH表达式并将传入值插入 领域 除了From之外,我的XML中还有其他元素。 感谢是否有人可以指出这一点。 谢谢,Manglu

动态xml进入mongoDB

我目前正在开发一个应用程序(Java),并且可以找到解决我的问题的最佳方法。 我需要在mongoDB中存储数据(当bson格式支持时使用实际数据类型),我获取xml文件中的数据,以及他的模式(两者都是在运行时动态创建的,所以我不知道它里面有什么)。 更具体地说,我没有关于字段,数据名称的任何信息。 用户可以动态地创建新的“对象”(应用程序中没有java类)。 当用户创建一个新对象时,我会收到一个描述该对象的xml架构。 因此,当用户尝试添加此类型的对象(数据为新实体的xml格式)时,我使用xml架构validation它,现在我需要将对象存储在mogoDB中。 所以我需要能够在bson(或使用mongo java驱动程序的基本java对象)中转换我的xml并在查询后转换回xml。 例: 如果用户想要管理人员,他将定义人员架构: … … … … 在这里,我得到了xsd(一个有效的xsd格式,包含所有信息)。 然后,当用户添加人员时,我得到的数据如下: John Smith 32 … 所以我想知道最好的方法是不是像jackson:xml – > Pojo – > bson,或者使用XSLT xml – > json / bson(带有数据类型的编码)。 或者只需手动读取xml文件和我的基本java对象。 有没有人就如何实施其中一种解决方案或更好的解决方案提出一些建议?

使用XSLT转换XML并保留Unicode字符

我的XSLT转换已成功几个月,直到我遇到带有Unicode字符的XML文件(很可能是表情符号)。 我需要保留Unicode,但XSLT将其转换为HTML实体。 我认为将编码设置为UTF-8可以解决我的问题,但我仍然遇到问题。 任何帮助赞赏。 码: private byte[] transform(InputStream stream) throws Exception{ System.setProperty(“javax.xml.transform.TransformerFactory”, “org.apache.xalan.processor.TransformerFactoryImpl”); Transformer xmlTransformer; xmlTransformer = (TransformerImpl) TransformerFactory.newInstance().newTransformer(new StreamSource(createXsltStylesheet())); xmlTransformer.setOutputProperty(OutputKeys.ENCODING, “UTF-8″); XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(stream,”UTF-8”); Source staxSource = new StAXSource(reader, true); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); Writer writer = new OutputStreamWriter(outputStream, “UTF-8”); xmlTransformer.transform(staxSource, new StreamResult(writer)); return outputStream.toByteArray(); } 如果我加 xmlTransformer.setOutputProperty(OutputKeys.METHOD, “text”); 保留Unicode但不保留XML。

增量/流式XSLT转换?

我通常在JDK(JDK 7)中使用XSLT支持进行XSLT转换。 最近我遇到了一个相当大的XML文档,并且对此应用XSLT转换(甚至是非常基本的转换)会导致大量内存被使用。 我一直小心翼翼地完成所有的处理流程,但似乎JDK中的XSLT引擎(看起来是一个修改过的Xalan)总是首先在内存中构建一个DOM。 显然这不是我想要的。 现在我发现单独提供的Xalan(2007年的2.7.1!)确实有一个用于进行增量转换的API。 虽然这似乎有效,但我实际上希望我的代码在股票JDK上运行,而不是告诉用户摆弄任何背书文件夹。 在Java中进行增量XSLT转换的最佳方法是什么,以便我的代码与未修改/库存JDK安装兼容? 更新:这个最近更新的问题密切相关: 什么是最高效的基于Java的流式XSLT处理器?

与使用DOM解析器手动解析XML文件相比,使用XSLT样式表是否有任何优势

对于我们的一个应用程序,我编写了一个使用java的DOM解析器的实用程序。 它基本上采用XML文件,解析它,然后使用以下方法之一处理数据以实际检索数据。 getElementByTagName() getElementAtIndex() getFirstChild() getNextSibling() getTextContent() 现在我必须做同样的事情,但我想知道使用XSLT样式表是否会更好。 向我们发送XML文件的组织不断更改其架构意味着我们必须更改我们的代码以满足这些shema更改。 我不太熟悉XSLT进程,所以我试图找出是否更好地使用XSLT样式表而不是“手动解析”。 XSLT样式表看起来很有吸引力的原因是我认为如果XML文件的架构发生变化,我只需要更改样式表吗? 它是否正确? 另一件我想知道的是两者中的哪一个(XSLT转换器或DOM解析器)性能更好。 对于手动选项,我只使用DOM解析器来解析xml文件。 XSLT转换器如何实际解析文件? 与手动解析xml文件相比,它是否包含额外的开销? 我问的原因是性能很重要,因为我将处理的数据的性质。 任何建议? 谢谢 编辑 基本上我目前正在做的是解析一个xml文件并处理一些xml元素中的值。 我不会将xml文件转换为任何其他格式。 我只是提取一些值,从Oracle数据库中提取一行并将一个新行保存到另一个表中。 我解析的xml文件只包含用于从数据库中检索某些数据的引用值。 xslt不适合这种情况吗? 如果架构发生变化,是否有更好的方法可以避免代码更改? 编辑2 对于我对XML数据所做的事情不够清楚而道歉。 基本上有一个包含一些信息的XML文件。 我从XML文件中提取此信息,并使用它从本地数据库中检索更多信息。 xml文件中的数据更像是数据库中所需数据的引用键。 然后,我使用XML文件中的特定密钥获取从XML文件中提取的内容以及从数据库中检索的内容,并将该数据保存到另一个数据库表中。 我遇到的问题是我知道如何编写一个DOM解析器来从XML文件中提取我需要的信息,但我想知道是否使用XSLT样式表是一个更好的选择,因为如果架构更改我不会更改代码。 阅读下面的回复听起来像XSLT仅用于转换和XML文件到另一个XML文件或其他格式。 鉴于我不打算转换XML文件,可能不需要添加解析XSLT样式表以及XML文件的额外开销。

解析XML文件以获取所有命名空间信息

我希望能够从给定的XML文件中获取所有命名空间信息。 例如,如果输入XML文件类似于: 1 bar foo 00.00 USD 11.11 AUD 2 some name some description 00.01 USD 我希望输出看起来像这样(在这种情况下以逗号分隔): create, ns1, http://predic8.com/wsdl/material/ArticleService/1/ article, ns1, http://predic8.com/material/1/ price, ns1, http://predic8.com/material/1/ id, ns1, http://predic8.com/material/1/ 重要笔记: 重要的是我们还要考虑在特定命名空间内定义的子节点,但其定义可以在更高节点处定义。 例如,我们仍然想要获取节点ns1:id ,我们需要追溯到父节点ns1:article以发现命名空间url是xmlns:ns1=’http://predic8.com/material/1/ 我在Java中实现,所以我不介意基于Java的解决方案,甚至基于XSLT的解决方案似乎都是合适的。

XSLT:我们可以使用abs值吗?

我想知道在XLST中我们是否可以使用数学:abs(…)? 我在某个地方看到了它,但它不起作用。 我有类似的东西: 我尝试过这样的事情: 但不起作用。 我正在使用java 1.6语言。

Saxon 9.2 / Java / XSLT:使用setParameters()设置变换器参数

我有以下XSLT 2.0模板: .. 我正在努力编程提供currentTotal作为变换器的参数,如下所示: transformer.setParameter(“currentTotal”, new Double(“100”)) ..但没有任何积极的结果: / xsl处的错误:transform / xsl:template [3] / xsl:variable [1] XPST0008:{$ currentTotal}中第-1行的字符13处的XPath语法错误:变量$ currentTotal尚未声明 当调用setParameter() , currentTotal变量也会被定义,对吗? 我应该如何调用setParameter()调用,以便在样式表中看到我的应用程序中定义的currentTotal ? 为了澄清,我正在实例化这样的变换器: System.setProperty(“javax.xml.transform.TransformerFactory”, “net.sf.saxon.TransformerFactoryImpl”); transformerFactory = new TransformerFactoryImpl(); transformer = transformerFactory.newTransformer(inputNodes);

选择xml原始文本

给出像这样的xml: Text 我想选择item / xmlText下的所有文本 。 我想用标签(someTag,otherTag)打印此节点的所有内容。 我更愿意用XPath处理这个问题,但这是Java程序的一部分,所以如果有这样的机制我也可以接受它。