使用从Java到XML文件的Xpath表达式创建基本换行符

时间:2013-02-15 17:03:39

标签: java xml xpath carriage-return

了解如何编写Stack Overflow程序提供了丰富的信息,是学习如何弄清楚不同事物的主要内容。然而对于这个问题,在搜索了几天后空手而归,我决定创建我的第一篇文章。

问题是,使用Xpath的Node.setTextContent从java字符串在XML文件中创建多行值。它写入Xpath报告为元素节点的XML文件中的值标记。现在,当将字符串值写入节点时,它确实将字符串值写入节点,但它只是一个长字符串值,因为根据API的setTextContent方法不会解析字符串中的任何内容而只是写入文本。我试图写的数据的一个例子是:(编辑2-16,只是注意到格式选项没有显示主要帖子)格式如下,街道,城市状态和电话分解如下信息(没有行之间的空格)以匹配第一个xml代码示例中列出的格式。

496 Vivid Ave。

一些城市,州,11111

111-222-3333

当java字符串被写入xml文件时,其输入为: 496 Vivid Ave.一些城市,州,11111 111-222-3333

从父程序(不是我的java应用程序)创建的节点的示例是:

<field sid="ADDRESS">
     <itemlocation>
        <ae>
           <ae>absolute</ae>
           <ae>33</ae>
           <ae>168</ae>
        </ae>
     </itemlocation>
     <value>496 Vivid Ave.
Some City, State, 11111
111-222-3333</value>
     <borderwidth>0</borderwidth>
     <fontinfo>
        <ae>Times New Roman</ae>
        <ae>10</ae>
        <ae>plain</ae>
     </fontinfo>
     <scrollhoriz>wordwrap</scrollhoriz>
     <scrollvert>fixed</scrollvert>
     <format>
        <ae>string</ae>
        <ae>optional</ae>
     </format>
     <acclabel>6.  leave address.
enter street, city, state, zip code and phone number.
</acclabel>
     <size>
        <ae>35</ae>
        <ae>3</ae>
     </size>
     <previous>FIELD5</previous>
     <next>ORDINARY</next>
  </field>

当我运行我的应用程序时,原始xml数据的输出如下所示:

<field sid="ADDRESS">
     <itemlocation>
        <ae>
           <ae>absolute</ae>
           <ae>33</ae>
           <ae>168</ae>
        </ae>
     </itemlocation>
     <value>496 Vivid Ave. Some City, State, 11111 111-222-3333</value>
     <borderwidth>0</borderwidth>
     <fontinfo>
        <ae>Times New Roman</ae>
        <ae>10</ae>
        <ae>plain</ae>
     </fontinfo>
     <scrollhoriz>wordwrap</scrollhoriz>
     <scrollvert>fixed</scrollvert>
     <format>
        <ae>string</ae>
        <ae>optional</ae>
     </format>
     <acclabel>6.  leave address.
enter street, city, state, zip code and phone number.
</acclabel>
     <size>
        <ae>35</ae>
        <ae>3</ae>
     </size>
     <previous>FIELD5</previous>
     <next>ORDINARY</next>
  </field>

我试图在字符串中手动输入换行符和回车符的转义字符,而它所做的就是调整代码值,而不是值。

当父程序读取我的Java代码时,它不会分解不同行上的地址和电话号码。

我正在使用的java看起来像:

public void setFieldValue(String sid, String value){
    Node resultNode = null;
    XPath xPath = XPathFactory.newInstance().newXPath();

    try{

        resultNode = (Node)xPath.evaluate(makeFieldString(sid), doc,XPathConstants.NODE);

    }catch(XPathExpressionException xpee){System.out.println(xpee + "Could not retrive node");}
     if (resultNode != null){

        resultNode.setTextContent(value);

    }
    else System.out.println("Epic fail");

    }

public String makeFieldString(String sid){
    String output=null;
    if (sid.equals("POPUP2")){
        output="//popup[@sid='" + sid + "']/value";
    }

    else{
       output=  "//field[@sid='" + sid + "']/value";
    }
    return output;
}

如果有人对如何让Java字符串包含setTextContent将识别的换行符有任何想法,我会建议它。我试图使用文本规范化和空白数据,而不是真正确定如何实现它,并且不确定这些方法是否会从setTextContent方法中分离出来的想法。

感谢您的帮助!我希望在我的问题中我已经足够明确,不要受到抨击!

1 个答案:

答案 0 :(得分:0)

我在http://xpath.alephzarro.com/content/cheatsheet.html找到了一个xpather cheetsheet,它显示了正则表达式中的特殊字符,而Xpath不会插入换行符的unicoode值,它确实识别出新行的\ n,现在地址块是格式正确。