我使用 XMLOutputter 编写 xml 文件,然后在 android 中使用它。当文件被写入时,字符串
<string name="sname"><u>Text</u></string>
Run Code Online (Sandbox Code Playgroud)
写成
<string name="sname"><u>Text<u></string>
Run Code Online (Sandbox Code Playgroud)
我从数据库读取“<u>Text<u>”,然后将其放入jdom文档中。然后我使用编写文档
XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
Writer writer = new OutputStreamWriter(new FileOutputStream(file), "utf-8");
outputter.output(doc, writer);
writer.close();
Run Code Online (Sandbox Code Playgroud)
如何防止转义并将准确的字符串从数据库放入文件?(我想要有“<”,而不是<那里)
我需要处理XML DOM,最好是使用JDOM,我可以在节点上进行XPath搜索.我知道节点名称或路径,但我想完全忽略名称空间,因为有时文档带有名称空间,有时没有,我不能依赖于特定的值.那可能吗?怎么样?
我目前正在使用JDOM进行一些简单的XML解析,看起来没什么类型安全 - 我在使用内置的Java DOM解析器时遇到了类似的问题,只需要更多的API来解决问题.
例如,XPath.selectNodes将一个Objectas作为参数并返回一个原始列表,它只是感觉有点Java 1.1
是否存在用于Java的通用化XML和XPath库,或者是否有某种原因导致无法以类型安全的方式执行XPath查询?
在我的XML文件中,我有一些实体,如 ’
所以我为我的XML文档创建了一个DTD标记来定义这些实体.下面是用于读取XML文件的Java代码.
SAXBuilder builder = new SAXBuilder();
URL url = new URL("http://127.0.0.1:8080/sample/subject.xml");
InputStream stream = url.openStream();
org.jdom.Document document = builder.build(stream);
Element root = document.getRootElement();
Element name = root.getChild("name");
result = name.getText();
System.err.println(result);Run Code Online (Sandbox Code Playgroud)
如何更改Java代码以通过HTTP检索DTD以允许解析我的XML文档没有错误?
xml文档的简化示例.
<main>
<name>hello ‘ world ’ foo & bar </name>
</main>
Run Code Online (Sandbox Code Playgroud) 我有一个类似以下的XML:
<documentation>
This value must be <i>bigger</i> than the other.
</documentation>
Run Code Online (Sandbox Code Playgroud)
使用JDOM,我可以得到以下文本结构:
Document d = new SAXBuilder().build( new StringReader( s ) );
System.out.printf( "getText: '%s'%n", d.getRootElement().getText() );
System.out.printf( "getTextNormalize: '%s'%n", d.getRootElement().getTextNormalize() );
System.out.printf( "getTextTrim: '%s'%n", d.getRootElement().getTextTrim() );
System.out.printf( "getValue: '%s'%n", d.getRootElement().getValue() );
Run Code Online (Sandbox Code Playgroud)
这给了我以下输出:
getText: '
This value must be than the other.
'
getTextNormalize: 'This value must be than the other.'
getTextTrim: 'This value must be than the other.'
getValue: '
This value must be bigger than the other.
' …Run Code Online (Sandbox Code Playgroud) 我需要将xml文件的内容打印到某个txt文件中.这是我要打印的xml类型的示例:
<log>
<logentry revision="234">
<author>SOMEGUY</author>
<date>SOME DATE</date>
<paths>
<path>asdf/asdf/adsf/asdf.zip</path>
</path>
<msg>blahblahblah</msg>
</logentry>
</log>
Run Code Online (Sandbox Code Playgroud)
我可以获得我需要的所有信息,除了路径标记...这就是我所做的:
FileWriter fstream = new FileWriter("c:\\work\\output.txt");
BufferedWriter out = new BufferedWriter(fstream);
Document document = (Document) builder.build(xmlFile);
Element rootNode = document.getRootElement();
List list = rootNode.getChildren("logentry");
for (int i=0; i< list.size(); i++) {
Element node = (Element) list.get(i);
out.write("Revision: \n" + node.getAttributeValue("revision") + "\n\n");
out.write("Author: \n" + node.getChildText("author") + "\n\n");
out.write("Date: \n" + node.getChildText("date") + "\n\n");
out.write("Message: \n" + node.getChildText("msg"));
out.write("\n-------------------------------------------------"
+"---------------------------------------------------\n\n");
}
out.close();
Run Code Online (Sandbox Code Playgroud)
那么,我是如何通过该标签获取信息的?
PS如果这是一个愚蠢的问题,请随意将其置于遗忘之中......只要你指引我回答:)
谢谢
以下是从Spring-ws手册中摘录的代码:
public class HolidayEndpoint {
private static final String NAMESPACE_URI = "http://mycompany.com/hr/schemas";
private XPath startDateExpression;
private XPath endDateExpression;
private XPath nameExpression;
private HumanResourceService humanResourceService;
@Autowired
public HolidayEndpoint(HumanResourceService humanResourceService) (2)
throws JDOMException {
this.humanResourceService = humanResourceService;
Namespace namespace = Namespace.getNamespace("hr", NAMESPACE_URI);
startDateExpression = XPath.newInstance("//hr:StartDate");
startDateExpression.addNamespace(namespace);
endDateExpression = XPath.newInstance("//hr:EndDate");
endDateExpression.addNamespace(namespace);
nameExpression = XPath.newInstance("concat(//hr:FirstName,' ',//hr:LastName)");
nameExpression.addNamespace(namespace);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,这似乎是使用JDOM 1.0,我想使用JDOM 2.0.
如何将此代码从JDOM 1.0转换为JDOM 2.0?为什么Spring没有更新他们的示例代码?
谢谢!
我有一个像下面这样的xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<config>
<admins>
<url name="Writer Admin">http://www.mywebsite.com/admins?cat=writer</url>
<url name="Editor Admin">http://www.mywebsite.com/admins?cat=editor</url>
</admins>
<users>
<url name="Critic User">http://www.mywebsite.com/users?cat=critic</url>
<url name="Reviewer User">http://www.mywebsite.com/users?cat=reviewer</url>
<url name="Reader User">http://www.mywebsite.com/users?cat=reader</url>
</users>
</config>
Run Code Online (Sandbox Code Playgroud)
如何使用Java中的JDOM库通过其"name"属性的值选择"url"元素?是否有任何简单的方法或我必须选择所有子元素并使用"for"循环检查所需的元素?有没有像.Net中的Linq那样的方法?
我在尝试加载rss页面时收到以下错误消息:
Feb 16, 2013 9:08:44 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [news-feed] in context with path [/publisher] threw exception [Servlet execution threw an exception] with root cause
java.lang.ClassNotFoundException: org.jdom.JDOMException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
at com.sun.syndication.io.SyndFeedOutput.<init>(SyndFeedOutput.java:44)
Run Code Online (Sandbox Code Playgroud)
触发错误的代码行是:
SyndFeedOutput output = new SyndFeedOutput();
Run Code Online (Sandbox Code Playgroud)
我已经搜索了此错误消息,并阅读了有关它的几个帖子,包括在此网站上发布的内容.这些帖子表明将jdom.jar添加到构建路径将导致错误消失.但是,我已经将与jdom-2.0.4.jar捆绑在一起的所有8个jar文件添加到我在eclipse中的buildpath中,但每次尝试加载rss页面时,错误消息仍然存在.
我想知道问题是否可能与我使用jdom-2.0.4.jar以及可能是旧语法的事实有关:
SyndFeedOutput output = new SyndFeedOutput();
Run Code Online (Sandbox Code Playgroud)
此错误消息的其他帖子都来自旧版本的jdom.也许在新版本的jdom中调用等效的SyndFeedOutput()有一些新的语法?
任何人都可以帮助我通过此错误消息?
为了解决Nocmear的建议,我已经确认以下9个jar文件是与jdom或rome相关的唯一jar文件,它们包含在我的应用程序的buildpath中:
jaxen-1.1.4.jar
jdom-2.0.4.jar
jdom-2.0.4-contrib.jar
jdom-2.0.4-javadoc.jar
jdom-2.0.4-junit.jar
jdom-2.0.4-sources.jar
rome-1.0.jar
xercesImpl.jar
xml-apis.jar
Run Code Online (Sandbox Code Playgroud)
第二次编辑:
我下载了jdom-1.1.3并将它添加到我的应用程序的eclipse中的buildpath中,正如rolfl建议的那样.
当我在我的网络浏览器中加载rss页面时,tomcat给了我以下错误日志:
java.lang.NoClassDefFoundError: org/jdom/JDOMException
com.sun.syndication.io.SyndFeedOutput.<init>(SyndFeedOutput.java:44)
publisher.web.NewsFeedServlet.doGet(NewsFeedServlet.java:68)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
java.lang.ClassNotFoundException: org.jdom.JDOMException
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
com.sun.syndication.io.SyndFeedOutput.<init>(SyndFeedOutput.java:44)
publisher.web.NewsFeedServlet.doGet(NewsFeedServlet.java:68)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
Run Code Online (Sandbox Code Playgroud)
现在包含在我的构建路径中的相关jar文件是: …
package xml.dierenshop.flaming.v1;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.XMLOutputter;
import org.jdom2.output.Format;
import java.io.FileWriter;
import java.io.IOException;
public class Writer {
public void Writer(String categorie, String code, String naamartikel, String beschrijvingartikel, double prijz, String imgurl, String imgurl2, String imgurl3, String imgurl4, String imgurl5) {
String prijs = String.valueOf(prijz);
Document document = new Document();
Element root = new Element("productlist");
String naamelement = "naam";
String categorieelement = "category";
String descriptionelement = "description";
Element child = new Element("product");
child.addContent(new Element(categorieelement).setText(categorie));
child.addContent(new Element("code").setText(code));
child.addContent(new Element(naamelement).setText(naamartikel));
child.addContent(new Element(descriptionelement).setText(beschrijvingartikel)); …Run Code Online (Sandbox Code Playgroud)