我想使用JDOM读取XML文件,然后使用XPath从JDOM文档中提取数据.它创建了Document对象,但是当我使用XPath查询Document的元素列表时,我什么也得不到.
我的XML文档在根元素中定义了一个默认命名空间.有趣的是,当我删除默认命名空间时,它成功运行XPath查询并返回我想要的元素.还有什么办法让我的XPath查询返回结果?
XML:
<?xml version="1.0" encoding="UTF-8"?>
<collection xmlns="http://www.foo.com">
<dvd id="A">
<title>Lord of the Rings: The Fellowship of the Ring</title>
<length>178</length>
<actor>Ian Holm</actor>
<actor>Elijah Wood</actor>
<actor>Ian McKellen</actor>
</dvd>
<dvd id="B">
<title>The Matrix</title>
<length>136</length>
<actor>Keanu Reeves</actor>
<actor>Laurence Fishburne</actor>
</dvd>
</collection>
Run Code Online (Sandbox Code Playgroud)
Java的:
public static void main(String args[]) throws Exception {
SAXBuilder builder = new SAXBuilder();
Document d = builder.build("xpath.xml");
XPath xpath = XPath.newInstance("collection/dvd");
xpath.addNamespace(d.getRootElement().getNamespace());
System.out.println(xpath.selectNodes(d));
}
Run Code Online (Sandbox Code Playgroud) 有没有办法将原始HTML放入LabelGWT 的小部件中?构造函数和setText()方法自动转义HTML的文本(因此<显示为<等).
我需要的是:
String matched = "two";
List<String> values = Arrays.asList("one", "two", "three");
StringBuilder sb = new StringBuilder();
for (String v : values){
if (v.equals(matched)){
sb.append("<b>" + v + "<b>");
} else {
sb.append(v);
}
sb.append(", ");
}
Label label = new Label();
label.setRawText(sb.toString());
//div contains the following HTML: "one, <b>two</b>, three, "
Run Code Online (Sandbox Code Playgroud)
我想输出以逗号分隔的字符串列表,但我希望其中一个字符串加粗.谢谢.
在我的Java Web应用程序中,我有以下文件:
/WEB-INF/classes/com/example/Foo.class
/WEB-INF/lib/example.jar <-- contains the class "com.example.Foo"
Run Code Online (Sandbox Code Playgroud)
是否将classes使用目录中定义的类而不是在example.jar?中定义的类?
谢谢.
鉴于此代码:
/* 1 */ InputStream in1 = ClassLoader.getSystemResourceAsStream("foobar.txt");
/* 2 */ InputStream in2 = this.getClass().getResourceAsStream("/foobar.txt");
Run Code Online (Sandbox Code Playgroud)
两者都返回相同的资源(我认为答案是"是")?
他们都访问"相同"的类路径吗?为什么#1中的方法名称"获取System ResourceAsStream",但对于#2,它只是"getResourceAsStream"?
谢谢
你如何用Java编写XML 1.1版文档?Java似乎只支持1.0版.
我尝试使用OutputKeys.VERSIONoutput属性,如下所示,但是没有效果:
DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
DocumentBuilder db = fact.newDocumentBuilder();
Document doc = db.newDocument();
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.VERSION, "1.1");
DOMSource source = new DOMSource(doc);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
transformer.transform(source, result);
System.out.println(writer.toString());
//still produces a 1.0 XML document
Run Code Online (Sandbox Code Playgroud)
我在以下JVM中测试了上面的代码:
如果可能的话,我宁愿不必包含任何外部库.谢谢.
我有一个扩展com.google.gwt.i18n.client.Messages类的接口,我用它来检索我的GWT应用程序中的i18n消息.它看起来像这样:
public interface MyMessages extends com.google.gwt.i18n.client.Messages {
@DefaultMessage("Hello world")
@Key("message1")
String message1();
@DefaultMessage("Hello again")
@Key("message2")
String message2();
//...
}
Run Code Online (Sandbox Code Playgroud)
通常,我使用GWT.create()如下所示创建它的实例:
private MyMessages messages = GWT.create(MyMessages.class);
Run Code Online (Sandbox Code Playgroud)
但是,这不适用于服务器端代码,只能用于客户端代码(它会抛出错误,说GWT.create()仅在客户端代码中可用).
类似问题的答案指向一个单独的库,您可以下载它可以让您访问服务器上的i18n消息,但我不想下载任何额外的库(这似乎是一个简单的问题,必须有一个简单解决方案).
总结:如何在服务器端代码中访问我的i18n消息? 谢谢.
我有一个关于在JAX-WS中使用MTOM/XOP的问题.我正在编写一个发送大量二进制数据的Web服务.客户端请求许多文件,服务器返回响应中的文件.
我能够正确地构建响应,以便正确实现XOP,但我遇到了与内存相关的问题,因为它在发送之前将整个响应存储在内存中.此Web服务发送的文件可能会变得非常大(如giga-bytes large),因此将响应存储在内存中不是一种选择.
此Oracle网站(并沿此一个),似乎解决了这个问题,但我只是不明白.我认为他们使用一个DataHandler对象来传输请求/响应,但我无法弄清楚它们如何实例化它.
我正在使用现有的WSDL生成我的JAX-WS类文件wsimport.我正在使用JAX-WS RI 2.1.6和Java 6.
我如何在建立响应时发送响应而不必先存储在内存中?
在此先感谢您的帮助.
更新12月17日:我将以下属性添加到包含二进制数据的WSDL中的schema元素.这会导致wsimport将DataHandler对象添加到JAXB类.FileDataHandler然后可以将A 添加到响应中,而不是添加文件的全部内容,从而允许服务器流式传输每个文件的内容,而不是将它们全部保存在内存中:
xmlns:xmime="http://www.w3.org/2005/05/xmlmime"
xmime:expectedContentTypes="application/octet-stream"
Run Code Online (Sandbox Code Playgroud)
因此,服务器现在正确地构建响应,并且客户端在收到请求时正确地将每个文件保存到磁盘.但是,客户端仍然会出于某种原因将整个响应读入内存.
服务器代码(SIB):
@MTOM
@StreamingAttachment(parseEagerly = true, memoryThreshold = 4000000L)
@WebService(...)
public class DownloadFilesPortTypeImpl implements DownloadFilesPortType {
@Override
public FileSetResponseType downloadFileSet(FileSetRequestType body) {
FileSetResponseType response = new FileSetResponseType();
for (FileRequest freq : body.getFileRequest()){
try{
//find the file on disk
File file = findFile(freq.getFileId());
//read the file data into memory …Run Code Online (Sandbox Code Playgroud) 我的"Messages.properties"文件中有一个属性,它有一个使用数字格式的参数:
my.message=File exceeds {0,number,0.0}MB.
Run Code Online (Sandbox Code Playgroud)
当我运行gwt:i18nMaven目标时,它会Messages根据我的"Messages.properties"文件中的属性生成一个接口(正常情况下):
public interface Messages extends com.google.gwt.i18n.client.Messages {
//...
@DefaultMessage("File exceeds {0,number,0.0}MB.")
@Key("my.message")
String my_message(String arg0);
//...
}
Run Code Online (Sandbox Code Playgroud)
问题是方法参数是a String.当我运行应用程序时,它给了我一个错误,因为message参数需要一个数字,但是提供了一个String(错误消息是,"Only Number子类可以被格式化为数字").
如何配置Maven让它将此参数更改为数字(如a float或Number)?谢谢.
有没有办法在Freemarker模板中将字节数组转换为base64?就像是:
<img src="data:image/jpeg;base64,${photo.data?base64}" />
Run Code Online (Sandbox Code Playgroud)
谢谢.
您可以在不使用该<list>元素的情况下在Spring application-context.xml文件中创建List 吗?
我有一个bean,其构造函数接受一个Collection对象,我想通过"value"属性传递整个列表.原因是此值来自.properties文件,您无法在.properties文件中定义列表.
我想做这样的事情......有可能吗?
MyClass.java:
public class MyClass{
public MyClass(Collection<String> collection){ /* ... */ }
}
Run Code Online (Sandbox Code Playgroud)
应用程序的context.xml:
<bean name="myBean" class="com.company.MyClass">
<constructor-arg value="${the.value}" />
</bean>
Run Code Online (Sandbox Code Playgroud)
.properties文件:
the.value=item1,item2,item3
Run Code Online (Sandbox Code Playgroud)
谢谢.