Home » Language IDEs » ServerTools (WTP) » Create a WTP XML Node from an XML string
|
Re: Create a WTP XML Node from an XML string [message #228540 is a reply to message #228524] |
Mon, 02 March 2009 15:58 |
Eclipse User |
|
|
|
Originally posted by: dcarver.starstandard.org
Have you tried the cloneNode() method?
I think the problem you are going to run into though is that you are
going from two different DOM implementations. So what you might have to
do is create a custom Clone Node method that takes the input of the
Xerces DOM node, and recreates a WTP DOM node, and returns the WTP DOM
node as it's result.
Unfortunately, WTP DOM is known not to be a 100% complete implementation
of DOM, so there are edge cases where it has problems. This appears to
be one.
Dave
Istvan wrote:
> Hello,
>
> I'm working on an XML editor based on WTP XML Editor, so I have to work
> with a WTP DOM.
>
> The problem:
> I have to create a Node from an XML String and insert the node to the
> WTP DOM.
> I can create document from a String but it won't be a WTP Document, so
> when I try to insert the first child of the newly created DOM to the WTP
> DOM I
> got the following exception:
>
> java.lang.ClassCastException: org.apache.xerces.dom.DeferredElementImpl
> cannot be cast to org.eclipse.wst.xml.core.internal.document.NodeImpl
> at
> org.eclipse.wst.xml.core.internal.document.NodeContainer.ins ertBefore(NodeContainer.java:269)
>
> at
> org.eclipse.wst.xml.core.internal.document.ElementImpl.inser tBefore(ElementImpl.java:693)
>
> at
> org.eclipse.wst.xml.core.internal.document.NodeContainer.app endChild(NodeContainer.java:129)
>
>
> Code I use to create the DOM:
> public static Document stringToDom(String xmlSource) throws
> SAXException, ParserConfigurationException, IOException {
> DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
> DocumentBuilder builder = factory.newDocumentBuilder();
> return builder.parse(new InputSource(new StringReader(xmlSource)));
> }
>
> I browsed the wst.core code but can't find any solution.
>
> Can anybody help me?
>
> Thanks,
> Istvan
|
|
|
Re: Create a WTP XML Node from an XML string [message #228548 is a reply to message #228540] |
Mon, 02 March 2009 16:08 |
Ed Merks Messages: 33218 Registered: July 2009 |
Senior Member |
|
|
David,
I suppose one could create a WTP DOM Document and use importNode on the
root element to clone, or would that result in cast exceptions as well?
David Carver wrote:
> Have you tried the cloneNode() method?
>
> I think the problem you are going to run into though is that you are
> going from two different DOM implementations. So what you might have
> to do is create a custom Clone Node method that takes the input of the
> Xerces DOM node, and recreates a WTP DOM node, and returns the WTP DOM
> node as it's result.
>
> Unfortunately, WTP DOM is known not to be a 100% complete
> implementation of DOM, so there are edge cases where it has problems.
> This appears to be one.
>
> Dave
>
> Istvan wrote:
>> Hello,
>>
>> I'm working on an XML editor based on WTP XML Editor, so I have to
>> work with a WTP DOM.
>>
>> The problem:
>> I have to create a Node from an XML String and insert the node to the
>> WTP DOM.
>> I can create document from a String but it won't be a WTP Document,
>> so when I try to insert the first child of the newly created DOM to
>> the WTP DOM I
>> got the following exception:
>>
>> java.lang.ClassCastException:
>> org.apache.xerces.dom.DeferredElementImpl cannot be cast to
>> org.eclipse.wst.xml.core.internal.document.NodeImpl
>> at
>> org.eclipse.wst.xml.core.internal.document.NodeContainer.ins ertBefore(NodeContainer.java:269)
>>
>> at
>> org.eclipse.wst.xml.core.internal.document.ElementImpl.inser tBefore(ElementImpl.java:693)
>>
>> at
>> org.eclipse.wst.xml.core.internal.document.NodeContainer.app endChild(NodeContainer.java:129)
>>
>>
>> Code I use to create the DOM:
>> public static Document stringToDom(String xmlSource) throws
>> SAXException, ParserConfigurationException, IOException {
>> DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
>> DocumentBuilder builder = factory.newDocumentBuilder();
>> return builder.parse(new InputSource(new StringReader(xmlSource)));
>> }
>>
>> I browsed the wst.core code but can't find any solution.
>>
>> Can anybody help me?
>>
>> Thanks,
>> Istvan
Ed Merks
Professional Support: https://www.macromodeling.com/
|
|
|
Re: Create a WTP XML Node from an XML string [message #228556 is a reply to message #228548] |
Mon, 02 March 2009 16:43 |
Istvan Messages: 15 Registered: July 2009 |
Junior Member |
|
|
Thanks for quick replies.
I checked this just now, normal cloneNode does not work, it produces the
same Exception than without using cloneNode.
Custom cloning: I thought there is a "more standard" way than doing this but
I think I will choose it, it is sure it will work.
Although, I would give a chance to the other solution.
Ed, how can I create a WTP DOM?
Can I force the stringToDom method below to create a WTP DOM?
Istvan
"Ed Merks" <Ed.Merks@gmail.com> wrote in message
news:goh09i$4bl$1@build.eclipse.org...
> David,
>
> I suppose one could create a WTP DOM Document and use importNode on the
> root element to clone, or would that result in cast exceptions as well?
>
>
> David Carver wrote:
>> Have you tried the cloneNode() method?
>>
>> I think the problem you are going to run into though is that you are
>> going from two different DOM implementations. So what you might have to
>> do is create a custom Clone Node method that takes the input of the
>> Xerces DOM node, and recreates a WTP DOM node, and returns the WTP DOM
>> node as it's result.
>>
>> Unfortunately, WTP DOM is known not to be a 100% complete implementation
>> of DOM, so there are edge cases where it has problems. This appears to
>> be one.
>>
>> Dave
>>
>> Istvan wrote:
>>> Hello,
>>>
>>> I'm working on an XML editor based on WTP XML Editor, so I have to work
>>> with a WTP DOM.
>>>
>>> The problem:
>>> I have to create a Node from an XML String and insert the node to the
>>> WTP DOM.
>>> I can create document from a String but it won't be a WTP Document, so
>>> when I try to insert the first child of the newly created DOM to the WTP
>>> DOM I
>>> got the following exception:
>>>
>>> java.lang.ClassCastException: org.apache.xerces.dom.DeferredElementImpl
>>> cannot be cast to org.eclipse.wst.xml.core.internal.document.NodeImpl
>>> at
>>> org.eclipse.wst.xml.core.internal.document.NodeContainer.ins ertBefore(NodeContainer.java:269)
>>> at
>>> org.eclipse.wst.xml.core.internal.document.ElementImpl.inser tBefore(ElementImpl.java:693)
>>> at
>>> org.eclipse.wst.xml.core.internal.document.NodeContainer.app endChild(NodeContainer.java:129)
>>>
>>> Code I use to create the DOM:
>>> public static Document stringToDom(String xmlSource) throws
>>> SAXException, ParserConfigurationException, IOException {
>>> DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
>>> DocumentBuilder builder = factory.newDocumentBuilder();
>>> return builder.parse(new InputSource(new StringReader(xmlSource)));
>>> }
>>>
>>> I browsed the wst.core code but can't find any solution.
>>>
>>> Can anybody help me?
>>>
>>> Thanks,
>>> Istvan
|
|
|
Re: Create a WTP XML Node from an XML string [message #228565 is a reply to message #228556] |
Mon, 02 March 2009 17:22 |
Ed Merks Messages: 33218 Registered: July 2009 |
Senior Member |
|
|
Istvan,
I assume there's a factory somewhere to create a Document. But then,
I'd have assumed there'd be something to create a instance from a Reader
or an InputStream...
Istvan wrote:
> Thanks for quick replies.
>
> I checked this just now, normal cloneNode does not work, it produces
> the same Exception than without using cloneNode.
> Custom cloning: I thought there is a "more standard" way than doing
> this but I think I will choose it, it is sure it will work.
>
> Although, I would give a chance to the other solution.
>
> Ed, how can I create a WTP DOM?
> Can I force the stringToDom method below to create a WTP DOM?
>
> Istvan
>
> "Ed Merks" <Ed.Merks@gmail.com> wrote in message
> news:goh09i$4bl$1@build.eclipse.org...
>> David,
>>
>> I suppose one could create a WTP DOM Document and use importNode on
>> the root element to clone, or would that result in cast exceptions as
>> well?
>>
>>
>> David Carver wrote:
>>> Have you tried the cloneNode() method?
>>>
>>> I think the problem you are going to run into though is that you are
>>> going from two different DOM implementations. So what you might
>>> have to do is create a custom Clone Node method that takes the input
>>> of the Xerces DOM node, and recreates a WTP DOM node, and returns
>>> the WTP DOM node as it's result.
>>>
>>> Unfortunately, WTP DOM is known not to be a 100% complete
>>> implementation of DOM, so there are edge cases where it has
>>> problems. This appears to be one.
>>>
>>> Dave
>>>
>>> Istvan wrote:
>>>> Hello,
>>>>
>>>> I'm working on an XML editor based on WTP XML Editor, so I have to
>>>> work with a WTP DOM.
>>>>
>>>> The problem:
>>>> I have to create a Node from an XML String and insert the node to
>>>> the WTP DOM.
>>>> I can create document from a String but it won't be a WTP Document,
>>>> so when I try to insert the first child of the newly created DOM to
>>>> the WTP DOM I
>>>> got the following exception:
>>>>
>>>> java.lang.ClassCastException:
>>>> org.apache.xerces.dom.DeferredElementImpl cannot be cast to
>>>> org.eclipse.wst.xml.core.internal.document.NodeImpl
>>>> at
>>>> org.eclipse.wst.xml.core.internal.document.NodeContainer.ins ertBefore(NodeContainer.java:269)
>>>>
>>>> at
>>>> org.eclipse.wst.xml.core.internal.document.ElementImpl.inser tBefore(ElementImpl.java:693)
>>>>
>>>> at
>>>> org.eclipse.wst.xml.core.internal.document.NodeContainer.app endChild(NodeContainer.java:129)
>>>>
>>>>
>>>> Code I use to create the DOM:
>>>> public static Document stringToDom(String xmlSource) throws
>>>> SAXException, ParserConfigurationException, IOException {
>>>> DocumentBuilderFactory factory =
>>>> DocumentBuilderFactory.newInstance();
>>>> DocumentBuilder builder = factory.newDocumentBuilder();
>>>> return builder.parse(new InputSource(new StringReader(xmlSource)));
>>>> }
>>>>
>>>> I browsed the wst.core code but can't find any solution.
>>>>
>>>> Can anybody help me?
>>>>
>>>> Thanks,
>>>> Istvan
>
Ed Merks
Professional Support: https://www.macromodeling.com/
|
|
|
Re: Create a WTP XML Node from an XML string [message #228573 is a reply to message #228565] |
Mon, 02 March 2009 18:13 |
Eclipse User |
|
|
|
Originally posted by: dcarver.starstandard.org
Ed Merks wrote:
> Istvan,
>
> I assume there's a factory somewhere to create a Document. But then,
> I'd have assumed there'd be something to create a instance from a Reader
> or an InputStream...
>
There is...but it does not implement the Standard JAXP Document
builder...with that said the following code will simulate it.
public Document load(java.net.URL url) throws DOMTestLoadException {
IStructuredDocument document = null;
Document doc = null;
IStructuredModel model = null;
try {
FileInputStream file = new FileInputStream(url.getPath());
InputStream inputStream = Utilities.getMarkSupportedStream(file);
ModelHandlerForXML xmlModelHandler = new ModelHandlerForXML();
IDocumentLoader loader = xmlModelHandler.getDocumentLoader();
document =
(IStructuredDocument)loader.createNewStructuredDocument("/home/dcarver/test.xml ",
inputStream, EncodingRule.FORCE_DEFAULT);
IModelLoader xmlModelLoader = xmlModelHandler.getModelLoader();
model = xmlModelLoader.createModel(document, url.getPath(),
xmlModelHandler);
}
catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
String text = model.getStructuredDocument().getText();
IDOMModel docModel = (IDOMModel)model;
doc = (Document)docModel.getDocument();
return doc;
}
That is some sample of how to create an WTP DOM from an input file.
Dave
|
|
| |
Re: Create a WTP XML Node from an XML string [message #228597 is a reply to message #228581] |
Tue, 03 March 2009 03:27 |
Eclipse User |
|
|
|
Originally posted by: dcarver.starstandard.org
Istvan,
If you can please open a bug report against the existing wst.xml
component, and report the issue with the cloneNode method.
It should take any DOM interface and clone the node, and not be dependent.
Dave
Istvan wrote:
> In the meantime I implemented a simple cloneNode method, it works.
>
> I also tested the code Dave posted: I changed it to receive an
> xml-string and build a document from it. Inserting the result as a child
> of a WTP node works, but I get errors when I try to format the node
> using xmlNodeActionManager.reformat(node, true).
> Maybe I will debug this later, but for now I will use the cloneNode method.
>
> Thanks a lot for both of you.
>
> Istvan
|
|
| |
Goto Forum:
Current Time: Wed Sep 25 18:04:18 GMT 2024
Powered by FUDForum. Page generated in 0.04656 seconds
|