मैं अपनी कक्षाओं और आउटपुट को जितना संभव कर सकता हूं उतना सरल बनाने जा रहा हूं, लेकिन मूल रूप से मैं जो कर रहा हूं वह है कि मैं org.w3c.dom.Element
(इस मामले में एक परमाणु लिंक का प्रतिनिधित्व करना) को JAXB में जोड़ना चाहता हूं वस्तु मैं वापस आ रहा हूँ। JAXB क्लास लग रहा है कि:रीस्टेसी/जेएक्सबी; कैसे मैं एक नाम स्थान से बचने है एक <any> टैग में एक तत्व को जोड़ा जा रहा है? (JAXB में <Element>)
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
import org.w3c.dom.Element;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "People", namespace = "main", propOrder = {
"any",
"persons"
})
public class People {
@XmlAnyElement
protected List<Element> any;
@XmlElement(name = "person", namespace = "main")
protected List<Person> persons;
[...]
}
मैं मैं इस तरह बनाने के एक टेम्पलेट का उपयोग कर तत्व बना रहा हूं:
import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
public class ElementGen {
public Element getTemplate() throws DOMException, SAXException, ParserConfigurationException {
final SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
final Schema schema = sf.newSchema(new StreamSource(
Thread.currentThread().getContextClassLoader().getResourceAsStream(ATOM_XSD)));
final DocumentBuilderFactory docBuilder = DocumentBuilderFactory.newInstance();
docBuilder.setSchema(schema);
final Document doc = docBuilder.newDocumentBuilder().newDocument();
linkTemplate = doc.createElementNS(ATOM_NAMESPACE, ATOM_LINK);
return linkTemplate;
}
}
(यही कारण है कि वास्तव में वर्ग कैसा दिखता है, मैं सिर्फ कोशिश कर रहा हूँ नहीं है इसे बाहरी बाहरी गड़बड़ के बिना परीक्षण करने के लिए कुछ संकलित करना जितना आसान हो सके)।
मैं तो का उपयोग कर उस टेम्पलेट क्लोन linkTemplate.cloneNode(false);
अब इस सब में काम करता है कि यह एक्सएमएल दिखाए, लेकिन अजीब बात यह है कि एक्सएमएल मैं वापस पाने के अतिरिक्त नामस्थान दी जाती है है:
<atom:link xmlns:ns3="main" xmlns="" href="href" rel="rel"/>
मैं तो जोड़ने linkTemplate.setAttribute("xmlns", null);
"xmlns: NS3" नाम स्थान गायब हो जाता है और मैं:
<atom:link xmlns="" href="href" rel="rel"/>
लेकिन वहाँ दूर करने कि xmlns का कोई रास्ता नहीं हो रहा है = ""। क्या मैं गलत तरीके से तत्व बना रहा हूं? या शायद कुछ और गलत हो रहा है? मैं क्यों यह इन सब पर तो कोई मदद/स्पष्टीकरण की सराहना की जाएगी जोड़ने है के रूप में एक नुकसान में नहीं बल्कि कर रहा हूँ।
संपादित करें: मेरा मानना है कि यह दस्तावेज मैं तत्व पैदा करने के लिए उपयोग किए जाने वाले नाम स्थान से संबंधित होना चाहिए, लेकिन मुझे यकीन है कि यह कैसे तय करने के लिए नहीं कर रहा हूँ। क्या दस्तावेज़ पर (एक्सएमएल) लक्ष्य नामस्थान स्थापित करने का कोई तरीका है?
संपादित करें 2: मुझे यकीन नहीं है कि यह किसी के लिए कुछ भी उपयोगी बनाता है, लेकिन अधिक प्रयोग के साथ मैंने पाया कि linkTemplate.setAttribute("xmlns:" + anything, null);
xmlns:[anything]=""
के साथ एक लिंक बनाने और अन्यथा उत्पन्न होने वाले अन्य लोगों को हटाने का प्रभाव है।
संपादित करें 3: XSD के प्रासंगिक बिट JAXB वस्तुओं उत्पन्न करने के लिए प्रयोग किया जाता है:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0"
xmlns="main"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:atom="http://www.w3.org/2005/Atom"
targetNamespace="main"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:complexType name="People">
<xs:sequence>
<xs:any namespace="##other" processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="person" type="Person" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
[attributes]
</xs:complexType>
[other types etc.]
हां, यह है। और मुझे एहसास हुआ कि सवाल लिखने के बाद, लेकिन परिणाम दुर्भाग्य से वही है। : \ – Thor84no
क्या आप अपना अपडेट किया गया कोड पोस्ट कर सकते हैं? – jtahlborn
एह। यह सचमुच है कि। ATOM_LINK अब "परमाणु: लिंक" है और सेटफ्रिक्स चला गया है। मैंने रूट तत्व बनाने और इस तत्व को उस बच्चे के रूप में बनाने का भी प्रयास किया, लेकिन यह कुछ भी नहीं किया, इसलिए मैंने इसे फिर से हटा दिया। – Thor84no