使用从Java到XML文件的Xpath表达式创建基本换行符
通过学习如何编程堆栈溢出提供了丰富的信息,也是学习如何解决不同问题的主要途径。然而,对于这个问题,在搜索了几天之后,我空手而归,我决定创建我的第一篇帖子 问题在于,使用Xpath的Node.setTextContent从java字符串在XML文件中创建多行值。它将写入Xpath报告为元素节点的XML文件中的值标记。现在,当将字符串值写入节点时,它确实会将字符串值写入节点,但是它只是一个长字符串值,因为根据API的setTextContent方法不会解析字符串中的任何内容,而只是写入文本。我试图写的数据的一个例子是:(编辑2-16,刚刚注意到格式选项没有显示主帖子)格式如下,街道、城邦和电话按如下信息分解(行间没有空格),以匹配第一个xml代码示例中列出的格式 维维德大街496号 某个城市,州,11111 111-222-3333 将java字符串写入xml文件时,其输入为: 州某市生动大道496号,111111111-222-3333 从父程序(不是我的java应用程序)创建的节点示例如下: 如果有人对如何让Java字符串包含setTextContent可以识别的换行符有任何想法,我会通知他。我曾尝试使用文本规范化和空白数据,但不确定如何实现,也不确定这些方法是否会从setTextContent方法中剥离出来使用从Java到XML文件的Xpath表达式创建基本换行符,java,xml,xpath,carriage-return,Java,Xml,Xpath,Carriage Return,通过学习如何编程堆栈溢出提供了丰富的信息,也是学习如何解决不同问题的主要途径。然而,对于这个问题,在搜索了几天之后,我空手而归,我决定创建我的第一篇帖子 问题在于,使用Xpath的Node.setTextContent从java字符串在XML文件中创建多行值。它将写入Xpath报告为元素节点的XML文件中的值标记。现在,当将字符串值写入节点时,它确实会将字符串值写入节点,但是它只是一个长字符串值,因为根据API的setTextContent方法不会解析字符串中的任何内容,而只是写入文本。我试图写
谢谢你的帮助!我希望我的问题足够清楚,不会被激怒 我找到了一个xpather cheetsheet,其中显示了正则表达式中的特殊字符,而Xpath不会插入换行符的Unicode值,它确实识别了新行,现在地址块的格式正确了。“它所做的只是输入代码值,而不是值。”你能举个例子吗?在父程序中,地址的读取方式与上面列出的value元素中的地址相同。因此,父程序将地址读取到地址框中,地址为496 Vivid Ave.Some City,State,11111 111-222-3333,放在一行中,word将其按其认为合适的方式包装,而不是在父程序中创建时,在第一组XML代码中,地址/电话号码的格式与XML代码中的格式相同。。。在上面的xml示例中,父程序读取中断,并显示与xml代码完全相同的内容。。这有意义吗?是的,我只是想知道你所说的“prting the code values”是什么意思?这是什么样子?我不知道如何更简洁:(我正在使用的应用程序是自动化我们在工作中所做的一些表单创建,因此在父程序中,当您键入street addy并点击return键时,它会向下移动一行,然后您键入city、state zip,然后点击return键并输入电话号码。当父程序保存xml文件时,它会输入值。)元素,无论您在框中键入什么,这是上面的第一组xml代码,请注意格式,其中每一组代码后面都有换行符。当使用my app和Xpath,设置节点文本值以保存数据时,它仅从单个字符串中提取。该字符串从数据库中提取,并且是存储数据的单个字符串如第二组xml代码中的示例所示,在xml值元素中的一行中显示地址。当在父程序中打开该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>
<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>
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;
}