我想在「ServiceAddRQ」以及「服務」標籤中創建下面的XML,其中具有xmlns:xsi =「http://www.w3.org/2001/XMLSchema-instance」。那麼可以創建這樣的XML嗎?是否有可能在父標籤和子標籤中編寫XMLSchema實例?
所需的XML:
<ServiceAddRQ echoToken="DummyEchoToken" version="2013/12"
xmlns="http://www.test.com/schemas/2005/06/messages"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.test.com/schemas/2005/06/messages ServiceAddRQ.xsd">
<Service xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ServiceHotel" availToken="1jMqWGjqrx25Bp60gV2Qggb3">
</Service>
</ServiceAddRQ>
的Java生成的XML:在Java中生成的代碼我得到 「服務」 標籤的空白的xmlns ...
<ServiceAddRQ xmlns="http://www.test.com/schemas/2005/06/messages"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" echoToken="6BB6B47EEEF4290515103925"
version="2013/12"
xsi:schemaLocation="http://www.test.com/schemas/2005/06/messages HotelValuedAvailRQ.xsd">
<Service xmlns="" xsi:type="ServiceHotel" availToken="1/YncBXZJXY17Z/ygNiO7gcg">
</Service>
</ServiceAddRQ>
Java代碼相同:
static private Namespace NSSERVICE = Namespace.getNamespace("http://www.test.com/schemas/2005/06/messages");
static private Namespace NSSCHEMA = Namespace.getNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
String sXMLOut = "";
Element barceloDS_requests= new Element("ServiceAddRQ",NSSERVICE);
barceloDS_requests.setAttribute("echoToken",searchParams.getSessionID().substring(0, 12)+GenTools.getSystemDateWithTime3());
barceloDS_requests.setAttribute("version","2013/12");
barceloDS_requests.addNamespaceDeclaration(NSSCHEMA);
barceloDS_requests.setAttribute("schemaLocation", "http://www.test.com/schemas/2005/06/messages HotelValuedAvailRQ.xsd", NSSCHEMA);
Namespace xsi = Namespace.getNamespace(GenTools.returnEmptyForNull(sXMLNS_XSI), "http://www.w3.org/2001/XMLSchema-instance");
Element eleService=new Element("Service");
eleService.setAttribute("type", "ServiceHotel", xsi);
eleService.setAttribute("availToken",contractInfo[1]);
barceloDS_requests.addContent(eleService);
sXMLOut = new GetXMLOutputter().getXMLOutputter(barceloDS_requests,true);
對於「如何更改我的代碼以生成X而不是Y」的問題,您確實需要向我們顯示您想要更改的當前代碼......但請注意,您實際上並不需要'xmlns: xsi'聲明,因爲「Service」元素會自動繼承其父項的名稱空間聲明。 –
嗨@IanRoberts,感謝您的寶貴迴應。你現在可以檢查我的java代碼片段。即使子標籤繼承父標籤命名空間,爲什麼我在Service標籤中獲得空白'xmlns'? –
您可以確認您使用的是哪種XML對象模型,因爲它絕對不是DOM(如在org.w3c.dom中)。它看起來像JDOM,對嗎? –