Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在文件上写入DOM时删除XMLNS属性_Java_Xml_Dom_Xml Namespaces - Fatal编程技术网

Java 在文件上写入DOM时删除XMLNS属性

Java 在文件上写入DOM时删除XMLNS属性,java,xml,dom,xml-namespaces,Java,Xml,Dom,Xml Namespaces,我有一个xml文件,看起来像这样 <?xml version="1.0" encoding="UTF-8" ?> <BulkDataExchangeRequests xmlns="urn:ebay:apis:eBLBaseComponents"> <Header> <Version>583</Version> <SiteID>0</SiteID> </Header>

我有一个xml文件,看起来像这样

     <?xml version="1.0" encoding="UTF-8" ?> 
 <BulkDataExchangeRequests xmlns="urn:ebay:apis:eBLBaseComponents">
 <Header>
  <Version>583</Version> 
  <SiteID>0</SiteID> 
  </Header>
 <AddFixedPriceItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">
  <ErrorLanguage>en_US</ErrorLanguage> 
  <WarningLevel>High</WarningLevel> 
  <Version>583</Version> 
 <Item>
  <CategoryMappingAllowed>true</CategoryMappingAllowed> 
  <ConditionID>1000</ConditionID> 
  <Country>US</Country> 
  <Currency>USD</Currency> 
  <Description>Minimal fixed-price shoe listing with SKU, free shipping, 3-day dispatch time, return policy, and no Item Specifics. New Nike Shox Elite TB White/White-Black-Chrome. Size: Mens US 12, UK 11, Europe 46 (Medium, D, M). Condition: New in box.</Description> 
  <DispatchTimeMax>3</DispatchTimeMax> 
  <InventoryTrackingMethod>SKU</InventoryTrackingMethod> 
  <ListingDuration>Days_30</ListingDuration> 
  <ListingType>FixedPriceItem</ListingType> 
  <Location>San Jose, CA</Location> 
  <PaymentMethods>PayPal</PaymentMethods> 
  <PayPalEmailAddress>MegaOnlineMerchant@gmail.com</PayPalEmailAddress> 
 <PrimaryCategory>
  <CategoryID>63850</CategoryID> 
  </PrimaryCategory>
  <Quantity>6</Quantity> 
 <ReturnPolicy>
  <ReturnsAcceptedOption>ReturnsAccepted</ReturnsAcceptedOption> 
  <RefundOption>MoneyBack</RefundOption> 
  <ReturnsWithinOption>Days_30</ReturnsWithinOption> 
  <Description>Text description of return policy details here.</Description> 
  <ShippingCostPaidByOption>Buyer</ShippingCostPaidByOption> 
  </ReturnPolicy>
 <ShippingDetails>
  <ShippingType>Flat</ShippingType> 
 <ShippingServiceOptions>
  <ShippingServicePriority>1</ShippingServicePriority> 
  <ShippingService>USPSPriority</ShippingService> 
  <ShippingServiceCost currencyID="USD">0.0</ShippingServiceCost> 
  <ShippingServiceAdditionalCost>0.00</ShippingServiceAdditionalCost> 
  <FreeShipping>true</FreeShipping> 
  </ShippingServiceOptions>
  </ShippingDetails>
  <Site>US</Site> 
  <SKU>1122334455-36</SKU> 
  <StartPrice>50.00</StartPrice> 
  <Title>Latest Nike Shox Elite TB White Mens Basketball Shoes S 12</Title> 
  <UUID>7d004a30b0f511ddad8b0807654c9a55</UUID> 
  </Item>
  </AddFixedPriceItemRequest>

583
0
恩努斯
高
583
真的
1000
美国
美元
最低固定价格的鞋子清单,包括SKU、免费送货、3天发货时间、退货政策和无物品细节。全新Nike Shox Elite TB白色/黑白铬合金。尺码:男式美国12码,英国11码,欧洲46码(中号,D码,M码)。条件:新的输入框。
3.
SKU
第30天
固定价格项目
加利福尼亚州圣何塞
贝宝
MegaOnlineMerchant@gmail.com 
63850
6.
接受退货
退款
第30天
此处为退货政策详细信息的文本说明。
买主
平的
1.
美国精神
0
0
真的
美国
1122334455-36 
50
最新Nike Shox Elite TB White男子篮球鞋S 12
7D004A30B0F511DDAD8B087654C9A55

当我从java修改此xml以放置新的UUID时,AddFixedPriceItemRequest元素将丢失其xmlns=“urn:ebay:api:eBLBaseComponents”属性。 我正在使用以下代码

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            factory.setNamespaceAware(true);
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document doc = builder.parse(new File(path + System.getProperty("file.separator") + "sc_input" + System.getProperty("file.separator") + "input.xml"));

NodeList list = doc.getElementsByTagName("UUID");
            for (int i = 0; i < list.getLength(); i++) {
                // Get element
                Element element = (Element) list.item(i);
                System.out.println(element.getTextContent());

                element.setTextContent(java.util.UUID.randomUUID().toString().replace("-", ""));
            }
            //setting up a transformer
            TransformerFactory transfac = TransformerFactory.newInstance();
            Transformer trans = transfac.newTransformer();

            //generating string from xml tree
            StringWriter sw = new StringWriter();
            StreamResult result = new StreamResult(sw);
            DOMSource source = new DOMSource(doc);
            trans.transform(source, result);
            String xmlString = sw.toString();

            //Saving the XML content to File
            OutputStream f0;
            byte buf[] = xmlString.getBytes();
            f0 = new FileOutputStream(path + System.getProperty("file.separator") + "sc_input" + System.getProperty("file.separator") + "input.xml");
            for (int i = 0; i < buf.length; i++) {
                f0.write(buf[i]);
            }
            f0.close();
            buf = null;
DocumentBuilderFactory=DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder=factory.newDocumentBuilder();
Document doc=builder.parse(新文件(path+System.getProperty(“File.separator”)+“sc_输入”+System.getProperty(“File.separator”)+“input.xml”);
节点列表=doc.getElementsByTagName(“UUID”);
对于(int i=0;i
我试图通过使用以下方法设置特定元素的名称空间来纠正这一点

 NodeList nodeList = doc.getElementsByTagName("AddFixedPriceItemRequest");
                for(int j = 0; j < nodeList.getLength(); j++){
                    Element element = (Element) nodeList.item(j);
                    if(!element.hasAttributes()){
                    element.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns","urn:ebay:apis:eBLBaseComponents");
                    }
                    System.out.println(element.getNodeValue());
   }
NodeList NodeList=doc.getElementsByTagName(“AddFixedPriceItemRequest”);
对于(int j=0;j

但这似乎不起作用。

是的,这是完全有效的输出。由于AddFixedPriceItemRequest元素嵌套在BulkDataExchangeRequests元素下,因此AddFixedPriceItemRequest元素上的xmlns声明是多余的

更新:
如果出于某种原因需要冗余的xmlns,可以尝试为BulkDataExchangeRequests元素使用不同的名称空间前缀。

我知道,一旦在根目录中声明了它,就不需要为AddFixedPriceItemrequest声明,但Ebay需要这样做。我需要一些方法把它放回那里,这样我的文件才能被Ebay正确处理。@Amit-真的吗?这么大的公司需要非标准的xml语义,这让我感到惊讶。如果不存在,会发生什么情况?如果我没有为AddFixedPricedItemBut添加xmlns,则会出现以下错误Failure SystemError如果我将名称空间添加到AddFixedPriceItem标记,易趣会处理它,而不会出现任何问题。@Amit-您是否尝试过我对不同前缀的建议?