从存储在文本文件中的XPath创建自定义XML

时间:2014-01-18 11:05:02

标签: java xml dom xpath sax

我有一个文本文件,其中包含来自其他(源)xml文件的xpath。但是,现在我想使用这些xpath来创建我的自定义xml文件。

以下文件如下: -

Source.xml

<?xml version="1.0" encoding="UTF-8"?>
<html>
    <head>
        <title> My Page</title>
    </head>
    <body>
        <a href="abc.html">HomePage</a>
        <form id="my form" name="form 22" class="forms">
            <table id="table1">
                <tbody>
                    <tr>
                        <td>
                           <a> UserName </a> 
                           <input type="textbox" id="username" name="uname" class="login"/>
                        </td>
                    </tr>
                    <tr>
                         <td>
                           <a> Password </a> 
                           <input type="textbox" id="password" name="pwd" class="login"/>
                        </td>  
                    </tr>
                </tbody>
            </table>
        </form>
    </body>
</html>

使用存储在文本文件中的java生成的xpath: -

源xpaths.txt

//html[1]/head[1]/title[1]="My Page"


//html[1]/body[1]/a[1][@href='abc.html']
//html[1]/body[1]/a[1]="HomePage"


//html[1]/body[1]/form[1][@id='my form']
//html[1]/body[1]/form[1][@name='form 22']
//html[1]/body[1]/form[1][@class='forms']
//html[1]/body[1]/form[1]/table[1][@id='table1']
//html[1]/body[1]/form[1]/table[1]/tbody[1]/tr[1]/td[1]/a[1]="UserName"


//html[1]/body[1]/form[1]/table[1]/tbody[1]/tr[1]/td[1]/input[1][@type='textbox']
//html[1]/body[1]/form[1]/table[1]/tbody[1]/tr[1]/td[1]/input[1][@id='username']
//html[1]/body[1]/form[1]/table[1]/tbody[1]/tr[1]/td[1]/input[1][@name='uname']
//html[1]/body[1]/form[1]/table[1]/tbody[1]/tr[1]/td[1]/input[1][@class='login']
//html[1]/body[1]/form[1]/table[1]/tbody[1]/tr[2]/td[1]/a[1]="Password"


//html[1]/body[1]/form[1]/table[1]/tbody[1]/tr[2]/td[1]/input[1][@type='textbox']
//html[1]/body[1]/form[1]/table[1]/tbody[1]/tr[2]/td[1]/input[1][@id='password']
//html[1]/body[1]/form[1]/table[1]/tbody[1]/tr[2]/td[1]/input[1][@name='pwd']
//html[1]/body[1]/form[1]/table[1]/tbody[1]/tr[2]/td[1]/input[1][@class='login']

现在,我希望我的自定义xml由这个xpath形成,如下所示: -

<My Page>
</My Page>

<HomePage>
    <href>abc.html</href>
</HomePage>

<UserName>
    <type>textbox</type>
    <id>username</id>
    <name>uname</name>
    <class>login</class>
</UserName>

<Password>
    <type>textbox</text>
    <id>password</id>
    <name>pwd</name>
    <class>login</class>
</Password>

//等等......

简而言之,我希望所有text或tags中的文本都是父节点,所有相应的属性都是它们的子节点。

如何在java中创建自定义xml?

感谢任何帮助...... :)

1 个答案:

答案 0 :(得分:0)

您需要将XSL transformation应用于Source.xml文件。 XSL文件使用XPath表达式,例如你的。

Java使用javax.xml.transform包支持XSL转换:

File sourceFile = new File("Source.xml");
File customXmlFile = new File("custom.xml");

Source source = new StreamSource(sourceFile);
Result result = new StreamResult(customXmlFile);

TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();

transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION. "yes");
transformer.setOutputProperty(OutputKeys.INDENT. "yes");

transformer.transform(source, result);