我写了java代码从. xsd文件中获取元数据,即子节点,并将此元数据作为参数传递给. xsl文件,以便根据. xml文件中的对应名称获取值,最后生成. csv格式的输出
XML文档
<personal>
<details>
<name>John</name>
<age>50</age>
<country>USA</country>
</details>
<details>
<name>Jams</name>
<age>40</age>
<country>UK</country>
</details>
</personal>
**其xsd**
<xs:element minOccurs="0" maxOccurs="unbounded" name="details">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" type="xs:string" />
<xs:element minOccurs="0" name="age" type="xs:string" />
<xs:element minOccurs="0" name="country" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
XSLT样式表
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="Elements"/>
<xsl:template match="/">
<xsl:for-each select="//details">
<xsl:value-of select="$Elements"/>
<xsl:value-of select="'
'"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Java代码
公共静态空main(String args[])抛出异常{
//Read the XML data file and code of stylesheet
File stylesheet = new File("src/style.xsl");
File xmlSource = new File("src/data.xml");
//It enables appln to obtain parser to produces DOM object from XML documents
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(xmlSource);
Document doc = builder.parse (new File("src/structure.xsd"));
NodeList list = doc.getElementsByTagName("xs:element");
String cols="";
//loop to print data
for(int i = 0 ; i < list.getLength(); i++){
Element first = (Element)list.item(i);
if(first.hasAttributes() && first.getAttributeNode("type") != null){
String nm = first.getAttribute("name");
cols=cols+nm+",";
}
}
cols=cols.substring(0, cols.length()-1);
System.out.println(cols);
//It process XML data into required format by reading .xsl file.
StreamSource stylesource = new StreamSource(stylesheet);
Transformer transformer = TransformerFactory.newInstance().newTransformer(stylesource);
transformer.setParameter("Elements", cols);
//Object that implements this interface contains the information needed to act as source input (XML source or transformation instructions).
Source source = new DOMSource(document);
//Directory in which file need to be save after transformation from xml to csv
Result outputTarget = new StreamResult(new File("C:/Users/Desktop/a.csv"));
//Transforming
transformer.transform(source, outputTarget);
}
实际输出
我正在得到。csv输出为
name,age,country
name,age,country
预期输出为
John,50,USA
Jams,40,UK
使用此转换(我已为全局参数$Elements提供了一个默认值,但每次从Java代码调用转换时都会覆盖此值):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:param name="Elements" select="'name,age,country'"/>
<xsl:template match="details">
<xsl:apply-templates select="
*[contains(concat(',',$Elements,','),
concat(',',name(),',')
)]"/>
<xsl:value-of select="'
'"/>
</xsl:template>
<xsl:template match="details/*">
<xsl:if test="not(position()=1)">,</xsl:if>
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
在提供的XML文档上应用此转换时:
<personal>
<details>
<name>John</name>
<age>50</age>
<country>USA</country>
</details>
<details>
<name>Jams</name>
<age>40</age>
<country>UK</country>
</details>
</personal>
产生所需的正确结果:
John,50,USA
Jams,40,UK
我有一个xslt文件,可以使用ApacheFop将xml文件转换为pdf。但是我的xslt中没有关于名称空间的所有信息。它依赖于xml。我可以用java分析xml文档,并从xml中获取所有名称空间。但我不知道如何将这个名称空间从java传递到xslt文件,以及下一步如何在
问题内容: 我读了很多文章,尝试了很多事情,但仍然无法通过xsl在参数中找到值。我从java的sun xalan开始,但是从来没有运行过,所以我改用saxon无济于事。我想将两个xml文档与xls合并为一个。永远不要在文件系统上,这是用于构建xml字符串/ docs的Web应用程序。我尝试将DTMAxisIterator,DomSource,Doc传递给以xsl,字符串设置的Node。在带有xsl
问题内容: 我有下一个XML: 如何获得此节点?我试过了 但它返回一个空数组。我该怎么做? 问题答案: 您需要确保XML解析器支持名称空间。 您还应该确保关闭,最好使用try-with-resources。
我使用的xml文件“savedwsdl.txt”的部分内容如下... 我写了下面给出的java代码,应该用什么来获取wsdl的子节点名:消息标记名为“debitrequest”
问题内容: 如何使用Jackson从JSON树中接收节点名称?JSON文件看起来像这样: 我有 并且需要类似的东西 谢谢。 问题答案: 此答案适用于2+之前的Jackson版本(最初写为1.8)。请参阅@SupunSameera的答案,以获取与较新版本的Jackson兼容的版本。 “节点名称”的JSON术语是“键”。由于 不包含键,因此您需要进行不同的迭代: 如果 只 需要查看键,则可以使用以下方
找不到我的问题的解决方案。我有要识别的节点,我的意思是-我必须获得以下情况下的节点名称: 当我使用以下语法时(FirePath,直接从浏览器) 或 然后我得到节点名称(链接组和文本img)。 在robot框架中,它不适用于关键字Get Text或Get Value。我收到消息:“InvalidSelectorException:消息:无效选择器:由于以下错误,无法找到xpath表达式名称为((//