2013-07-16 39 views
1

我使用下面的代码来获取解组并通过Xpath查询unmarshelled对象。 我可以在取消编组后获取对象,但在XPath查询时,该值为空。EclipseLink Moxy unmarshall和getValueByXPath给出null

我是否需要指定任何NameSpaceResolver?

请让我知道,如果你正在寻找任何进一步的信息。

我的代码:

  JAXBContext jaxbContext = (JAXBContext) JAXBContextFactory.createContext(new Class[] {Transaction.class}, null); 
     Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); 
     StreamSource streamSource= new StreamSource(new StringReader(transactionXML)); 
     transaction = unmarshaller.unmarshal(streamSource, Transaction.class).getValue(); 
     String displayValue = jaxbContext.getValueByXPath(transaction, xPath, null, String.class); 

我的XML:

  <Transaction xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:xsd="http://www.w3.org/2001/XMLSchema" > 
     <SendingCustomer firstName="test"> 

     </SendingCustomer> 
     </Transaction> 
+0

那么你的XPath表达式是什么? “值为空” - 是字符串null(未设置)还是空的? –

回答

1

由于在您的例子中,没有命名空间,你不用担心撬动NamespaceResolver。您没有提供您遇到问题的XPath,因此我在下面的示例中选择了一个。

Java模型

交易

import javax.xml.bind.annotation.*; 

@XmlRootElement(name="Transaction") 
public class Transaction { 

    @XmlElement(name="SendingCustomer") 
    private Customer sendingCustomer; 

} 

客户

import javax.xml.bind.annotation.XmlAttribute; 

public class Customer { 

    @XmlAttribute 
    private String firstName; 

    @XmlAttribute 
    private String lastNameDecrypted; 

    @XmlAttribute(name="OnWUTrustList") 
    private boolean onWUTrustList; 

    @XmlAttribute(name="WUTrustListType") 
    private String wuTrustListType; 

} 

DEMO CODE

input.xml中

<Transaction xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <SendingCustomer firstName="test" lastNameDecrypted="SMITH" 
     OnWUTrustList="false" WUTrustListType="NONE"> 

    </SendingCustomer> 
</Transaction> 

演示

import javax.xml.bind.Unmarshaller; 
import javax.xml.transform.stream.StreamSource; 
import org.eclipse.persistence.jaxb.JAXBContext; 
import org.eclipse.persistence.jaxb.JAXBContextFactory; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jaxbContext = (JAXBContext) JAXBContextFactory.createContext(new Class[] {Transaction.class}, null); 
     Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); 
     StreamSource streamSource= new StreamSource("src/forum17687460/input.xml"); 
     Transaction transaction = unmarshaller.unmarshal(streamSource, Transaction.class).getValue(); 
     String displayValue = jaxbContext.getValueByXPath(transaction, "SendingCustomer/@firstName", null, String.class); 
     System.out.println(displayValue); 
    } 

} 

输出

test 
+1

谢谢你Blaise.Thats工作。我给了/ Transaction/SendingCustomer/@ firstName而不是SendingCustomer/@ firstName。 –

相关问题