了解如何编写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方法中分离出来的想法。
感谢您的帮助!我希望在我的问题中我已经足够明确,不要受到抨击!
答案 0 :(得分:0)
我在http://xpath.alephzarro.com/content/cheatsheet.html找到了一个xpather cheetsheet,它显示了正则表达式中的特殊字符,而Xpath不会插入换行符的unicoode值,它确实识别出新行的\ n,现在地址块是格式正确。