Looping and Deleting XML Nodes

A bit perplexed about what is likely a simple problem.
Say I have the following XML (myXML):
<stories>
<story id="1"/>
<story id="2"/>
<story id="3"/>
<otherNode id="15"/>
<otherNode id="15"/>
</stories>
I want to delete nodes with id's of one and two.
So I currently have:
for (var nodeIndex in myXML.story) {
var nodeValue = myXML.story[nodeIndex];
if (nodeValue != undefined) {
if (nodeValue.@id == "1" || nodeValue.@id == "2") {
delete myXML.story[nodeIndex];
The problem: After deleting the node with id="1" the very next iteration is the node with id="3" - the node with id="2" is never read.
While it totally makes sense to me, my only dummified solution was to switch to a numeric loop and use nodeIndex-- when I delete a node. But that seems rather unelegant.

Hi,
elegant:
delete myXML.story.(@id = '1')[0];
delete myXML.story.(@id = '2')[0];
But you should know that you have only one element with this id.

Similar Messages

  • Strange behavior when deleting XML nodes

    I am developing a thermocouple product builder for a client.  I have an XML file that looks like this:
    <thermocouple>
      <step id="step1">
        <property name="CALIBRATION">
            <option code="K">TYPE-K (CHROMEL-ALUMEL)</option>
            <option code="J">TYPE-J (IRON-CONSTANTAN)</option>
            <option code="N">TYPE-N (NICROSIL-NISIL)</option>
            <option code="T">TYPE-T (COPPER-CONSTANTAN)</option>
            <option code="E">TYPE-E (CHROMEL-CONSTANTAN)</option>
            <option code="S">TYPE-S (PLATINUM-PLAT 10% RH)</option>
            <option code="R">TYPE-R (PLATINUM-PLAT 13% RH)</option>
            <option code="B">TYPE-B (PLAT 6% RH-PLAT 30% RH)</option>
            <option code="C">TYPE-C (TUNG 5% RE-TUNG 26% RE)</option>
        </property>
      </step>
      <step id="step2">
        <property name="MATERIAL">
            <option code="1" ncw="JEC">INCONEL 600</option>
            <option code="2" ncw="NSRBC">304 STAINLESS STEEL</option>
            <option code="3" ncw="NSRBC">316 STAINLESS STEEL</option>
            <option code="4" ncw="NSRBC">310 STAINLESS STEEL</option>
            <option code="5" ncw="NSRBC">446 STAINLESS STEEL</option>
            <option code="6" ncw="JNESRBC">NICROBELL-B</option>
            <option code="7" ncw="JNESRBC">NICROBELL-C</option>
            <option code="8" ncw="JNESRBC">HASTELLOY-X</option>
            <option code="9" ncw="KJNE">TANTALUM</option>
            <option code="22" ncw="JNE">ALUMINA</option>
            <option code="33">MULLITE</option>
            <option code="44" ncw="KJNE">MOLYBDENUM</option>
        </property>
      </step>...etc.
    </thermocouple>
    As each step is loaded, an XMLList is culled from the XML file for that step, and then that XMLList acts as the data provider for a combobox.  When the first step has been completed, a flag called "calCode" is set using the @code attribute from the step 1 data.
    Steps 2 through 4 have some options that will not work with certain calibration types from step 1.  So I added another attribute to those options, @ncw.  This stands for "not compatible with".  If a calibration code exists inside a certain option's @ncw attribute, that means that option should not be included in the XMLList that is the data provider.  Here's the code I wrote to do this:
    myXml = thermoData.lastResult.step.(@id==myStep).property.option ; /* Initialize the XMLList */
                if(calCode) { /* If the calCode flag is set */
                    for(var i:uint=0;i<myXml.length();i++) { /* For each item in the XMLList */
                        if(myXml.@ncw[i]) { /* If the @ncw attribute exists in the current item */
                            if(myXml.@ncw[i].match(calCode)!=null) { /* If the calCode is found in the value of the @ncw attribute */
                                delete myXml[i]; /* Delete the current item */
    Here's where things get screwy. If I choose Type C in the first step, the resulting XMLList for step 2 should be very small because that calibration type is only compatible with a few materials.  It should look like this:
    <option code="9" ncw="KJNE">TANTALUM</option>
    <option code="22" ncw="JNE">ALUMINA</option>
    <option code="33">MULLITE</option>
    <option code="44" ncw="KJNE">MOLYBDENUM</option>
    However, when I test it, it looks like this:
    <option code="2" ncw="NSRBC">304 STAINLESS STEEL</option>
    <option code="4" ncw="NSRBC">310 STAINLESS STEEL</option>
    <option code="6" ncw="JNESRBC">NICROBELL-B</option>
    <option code="8" ncw="JNESRBC">HASTELLOY-X</option>
    <option code="9" ncw="KJNE">TANTALUM</option>
    <option code="22" ncw="JNE">ALUMINA</option>
    <option code="33">MULLITE</option>
    <option code="44" ncw="KJNE">MOLYBDENUM</option>
    It seems to be deleting every other item in the XMLList where the calCode exists in the @ncw attribute, instead of every item.  Does anyone know why?  I am only an intermediate ActionScript programmer, and this is my first Flex project ever, so I'm totally willing to accept that I could have made a huge mistake somewhere.  I can post the entire source code if you want to look it over... it's pretty long and I'm rubbish at commenting.  Thanks!

    I figured it out.  This is probably a pretty amateur mistake.  By checking each node in turn and deleting it if there is a match, I'm unintentionally changing the index number of each subsequent node.  So if myXml[1] gets deleted, all the other nodes have their indices reduced by one, but the loop counter continues to increment, so the node that was 2 is now 1, and it never gets checked.  I think instead of deleting nodes I need to treat the master XMLList as a source and move the non-matching nodes to a duplidate list that will then act as the data provider.

  • Help on creating and deleting xml child elements using Toplink please.

    Hi there,
    I am trying to build a toplink xml demo illustrating toplink acting as the layer between my java code and an xml datasource.
    After pulling my custom schema into toplink and following the steps in http://www.oracle.com/technology/products/ias/toplink/preview/10.1.3dp3/howto/jaxb/index.htm related to
    Click on Mapping Workbench Project...Click on From XML Schema (JAXB)...
    I am able to set up java code which can run get and sets against my xml datasource. However, I want to also be able create and delete elements within the xml data for child elements.
    i.e. in a simple scenario I have a xsd for departments which has an unbounded element of type employee. How does toplink allow me to add and or remove employees in a department on the marshalled xml data source? Only gets and sets for the elements seem accessible.
    In my experience with database schema based toplink demos I have seen methods such as:
    public void setEmployeesCollection(Collection EmployeesCollection) {
         this.employeesCollection = employeesCollection;
    Is this functionality available for xml backended toplink projects?
    cheers
    Nick

    Hi Nick,
    Below I'll give an example of using the generated JAXB object model to remove and add a new node. The available APIs are defined in the JAXB spec. TopLink also supports mapping your own objects to XML, your own objects could contain more convenient APIs for adding or removing collection members
    Example Schema
    The following XML Schema will be used to generate a JAXB model.
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
         elementFormDefault="qualified" attributeFormDefault="unqualified">
         <xs:element name="department">
              <xs:complexType>
                   <xs:sequence>
                        <xs:element ref="employee" maxOccurs="unbounded"/>
                   </xs:sequence>
              </xs:complexType>
         </xs:element>
         <xs:element name="employee">
              <xs:complexType>
                   <xs:sequence>
                        <xs:element name="name" type="xs:string"/>
                   </xs:sequence>
              </xs:complexType>
         </xs:element>
    </xs:schema>---
    Example Input
    The following document will be used as input. For the purpose of this example this XML document is saved in a file called "employee-data.xml".
    <department>
         <employee>
              <name>Anne</name>
         </employee>
         <employee>
              <name>Bob</name>
         </employee>
    </department>---
    Example Code
    The following code demonstrates how to use the JAXB APIs to remove the object representing the first employee node, and to add a new Employee (with name = "Carol").
    JAXBContext jaxbContext = JAXBContext.newInstance("your_context_path");
    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
    File file = new File("employee-data.xml");
    Department department = (Department) unmarshaller.unmarshal(file);
    // Remove the first employee in the list
    department.getEmployee().remove(0);
    // Add a new employee
    ObjectFactory objectFactory = new ObjectFactory();
    Employee newEmployee = objectFactory.createEmployee();
    newEmployee.setName("Carol");
    department.getEmployee().add(newEmployee);
    Marshaller marshaller = jaxbContext.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
    marshaller.marshal(department, System.out);---
    Example Output
    The following is the result of running the example code.
    <department>
         <employee>
              <name>Bob</name>
         </employee>
         <employee>
              <name>Carol</name>
         </employee>
    </department>

  • Delete XML nodes with E4X

    I trying to delete all the node from a XML that doesn't match some values.
    <Data>
         <Type id="1">
              <Details id="1">
                   <Products id="1">
                        <Value>123</Value>
                   </Products>
              </Details>
              <Details id="2">
                   <Products id="2">
                        <Value>123</Value>
                   </Products>
              </Details>
              <Details id="1">
                   <Products id="3">
                        <Value>123</Value>
                   </Products>
              </Details>
         </tType>
         <Type id="2">
              <Details id="1">
                   <Products id="1">
                        <Value>123</Value>
                   </Products>
              </Details>
              <Details id="2">
                   <Products id="2">
                        <Value>123</Value>
                   </Products>
              </Details>
         </Type>
    </Data>;
    Let's suppose I want to delete all the nodes "Details" where id == 1.
    I tried something like:
    delete xml..Details.(@id == 1);
    But this gives me and error...
    TypeError: Error #1119: Delete operator is not supported with operand of type XMLList
    So I tried:
    = 1);
    delete xml..Details.(@id == 1)[0];
    But this produces the following result (what makes some sense, since I passed only index 0).
    <Data>
      <ClientType id="1">
        <Details id="2">
          <Products id="2">
            <Value>123</Value>
          </Products>
        </Details>
        <Details id="1">
          <Products id="3">
            <Value>123</Value>
          </Products>
        </Details>
      </ClientType>
      <ClientType id="2">
        <Details id="1">
          <Products id="1">
            <Value>123</Value>
          </Products>
        </Details>
        <Details id="3">
          <Products id="2">
            <Value>123</Value>
          </Products>
        </Details>
      </ClientType>
    </Data>
    Only the first match is delete and not all the nodes.
    Can someone help on this one?
    thank you.

    Ok, I tried something and It works...
    while(xml..Details.(@id == 1).length() > 0)
        delete xml..Details.(@id == 1)[0];
    But, there's any direct solution to this? Only with E4X?

  • Delete xml node

    i am looking delete a node by referencing the id attribute.
    this sounds easy enough, but unless i am missing something, i am
    stumped...
    or maybe there is a better way to accomplish my goal. to
    simplify things, i would like to take xml bind it to a data grid
    and select a row from the datagrid and remove the row from the
    datagrid and the xml. the reason why i need it removed from the xml
    is for local file storage via zinc...
    thanks in advance
    var x1:XML = <x1>
    <a id = "1">AAA</a>
    <a id = "2">BBB</a>
    <a id = "3">CCC</a>
    <a id = "4">DDD</a>
    </x1>;
    delete x1.a.@id['1'];
    keith

    thanks for the reply. i think my question may have been a bit
    misleading. what i am trying to do is remove a node from the xml i
    wish to save.
    var x1:XML = <x1>
    <a id = "1">AAA</a>
    <a id = "2">BBB</a>
    <a id = "3">CCC</a>
    <a id = "4">DDD</a>
    </x1>;
    delete x1.a.@id['1'];
    trace(x1);
    preferred output:
    <x1>
    <a id = "2">BBB</a>
    <a id = "3">CCC</a>
    <a id = "4">DDD</a>
    </x1>;

  • Search for, edit, and delete XML tag (Adobe InDesign Server CS5)

    Hi all,
    I'm working with Indesign Server CS5 and JavaScript, though having some trouble coming up with a solution to a problem...
    I need to build a JS script (called through SOAP) that will enable me to search an InDesign file for a given XML tag.
    Upon finding the XML tag, if the 'action' variable is set to delete, it should delete the tag and its contents.
    If the action is set to edit, it should change the contents of the tag to some user-specified content.
    The primary caveat is that the XML tag is variable, as is the XML structure of the InDesign file.
    Here's what I have in mind, in pseudocode:
    function findXMLTag(tag, action) {
         app.searchForTag(tag);
         if (tagIsFound) {
              if (action == "delete") {
                   tag.delete;
              } else if (action == "edit") {
                   tag.contents = "Updated content";
    Any help would be greatly appreciated!
    Thanks,
    Ben Kay

    'searchForTag' can be implemented as a recursive function.
    Recursion is defined like this: I thought, "I'll just search this forum for 'recursion'." The first post I found was one of my own, suggesting that the poster should search the forum for 'recursion'.
    Here is an example: find the XML Element [<email>]
    And another: Remove xml element using JS[CS3] (read carefully, as the OP got stuck on how to successfully remove an element and continue)
    And one, using XML Rules -- which I'm totally unfamiliar with, but may work for you: Changing Values in XML tags

  • Insert, update and delete with xml file

    I have sample xml file called ws.xml.It got following data
    <uddi>
    <webservice>
    <name>movies</name>
    <path>/movies</path>
    <output>movies.wsdl</output>
    <url>www.movies.com</url>
    </webservice>
    </uddi>
    So, with how do i insert or delete or modify the webservice tag?

    Hi Arvind You can insert , modify and delete any node in XML using DOM parser.. First read XML file and get tree of entire node then traverse through entire tree and reached at specific point .. Then using DOM parser you can modify ,insert or delete any node ... Please check NODE class of API.. In that varios methods are there.. like removeChild();modifyChild()... After doing proper operation ...again write root node to file using FileWriter..
    Regards
    Pradeep Jain

  • I clicked on page source and deleted nodes with the web developer and the deletion has become permanent. Ebay won't load pictures. How to fix?

    The problem is on my desktop and my laptop. I got a bit click happy on my desktop computer and hit the Web Developer button. I was trying to delete a really annoying flash ad on the side of the screen. I think I got into page source and deleted the node. I'm truly not sure what happened, but pictures stopped loading for ebay and everything is a worded list down the side of the page. I have deleted cache and cookies. I have reset mozilla. I have uninstalled and reinstalled mozilla. Laptop was not immediately affected, but now having the same problem.

    This is a very strange issue.<br>
    No changes made with the web developer tool will save and should be cleared when the page is reloaded.
    Try disabling graphics hardware acceleration. Since this feature was added to Firefox, it has gradually improved, but there still are a few glitches.
    You might need to restart Firefox in order for this to take effect, so save all work first (e.g., mail you are composing, online documents you're editing, etc.).
    Then perform these steps:
    *Click the orange Firefox button at the top left, then select the "Options" button, or, if there is no Firefox button at the top, go to Tools > Options.
    *In the Firefox options window click the ''Advanced'' tab, then select "General".
    *In the settings list, you should find the ''Use hardware acceleration when available'' checkbox. Uncheck this checkbox.
    *Now, restart Firefox and see if the problems persist.
    Additionally, please check for updates for your graphics driver by following the steps mentioned in the following Knowledge base articles:
    * [[Troubleshoot extensions, themes and hardware acceleration issues to solve common Firefox problems]]
    * [[Upgrade your graphics drivers to use hardware acceleration and WebGL]]
    Did this fix your problems? Please report back soon.

  • How do I use For loop to check each node and import them to a new document?

    In my function I would like to use a For loop to get all the statutes (xml) inside the object
    objXmlBcaResponseDoc. In my case there are 2 statutes. I would like the output to look like the one I have posted here below. I am not sure how to do the For loop. The commented For loop is from another function but it is not working inside
    this function.
    The output is added into the **objXmlResponseMessageDoc** object and should look like this with 2 statutes (ns1:Statute) and a totalCount=2
    <BasicSearchQueryResponse xmlns="http://crimnet.state.mn.us/mnjustice/statute/service/4.0">
    <StatutesXml>
    <Statutes runType="Request" runDateTime="2015-03-17T10:23:04" totalCount="2">
    <ns1:Statute xmlns:ns1="http://crimnet.state.mn.us/mnjustice/statute/messages/4.0">
    <StatuteId xmlns="http://crimnet.state.mn.us/mnjustice/statute/4.0">8471</StatuteId>
    <Chapter xmlns="http://crimnet.state.mn.us/mnjustice/statute/4.0">60</Chapter>
    <Section xmlns="http://crimnet.state.mn.us/mnjustice/statute/4.0">55</Section>
    <Subdivision xmlns="http://crimnet.state.mn.us/mnjustice/statute/4.0"/>
    </ns1:Statute>
    <ns1:Statute>
    <StatuteId xmlns="http://crimnet.state.mn.us/mnjustice/statute/4.0">9722</StatuteId>
    <Chapter xmlns="http://crimnet.state.mn.us/mnjustice/statute/4.0">90</Chapter>
    <Section xmlns="http://crimnet.state.mn.us/mnjustice/statute/4.0">25</Section>
    <Subdivision xsi:nil="true" xmlns="http://crimnet.state.mn.us/mnjustice/statute/4.0"/>
    </ns1:Statute>
    </Statutes>
    </StatutesXml>
    </BasicSearchQueryResponse>
    My xml doc is found inside objXmlBcaResponseDoc Here is xml inside
    objXmlBcaResponseDoc object
    <BasicSearchQueryResponse xmlns="http://crimnet.state.mn.us/mnjustice/statute/service/4.0">
    <ns1:Statutes xmlns:ns1="http://crimnet.state.mn.us/mnjustice/statute/messages/4.0">
    <ns1:Statute>
    <StatuteId xmlns="http://crimnet.state.mn.us/mnjustice/statute/4.0">8471</StatuteId>
    <Chapter xmlns="http://crimnet.state.mn.us/mnjustice/statute/4.0">60</Chapter>
    <Section xmlns="http://crimnet.state.mn.us/mnjustice/statute/4.0">55</Section>
    <Subdivision xsi:nil="true" xmlns="http://crimnet.state.mn.us/mnjustice/statute/4.0"/>
    </ns1:Statute>
    <ns1:Statute>
    <StatuteId xmlns="http://crimnet.state.mn.us/mnjustice/statute/4.0">9722</StatuteId>
    <Chapter xmlns="http://crimnet.state.mn.us/mnjustice/statute/4.0">90</Chapter>
    <Section xmlns="http://crimnet.state.mn.us/mnjustice/statute/4.0">25</Section>
    <Subdivision xsi:nil="true" xmlns="http://crimnet.state.mn.us/mnjustice/statute/4.0"/>
    </ns1:Statute>
    </BasicSearchQueryResponse>
    Here is my function
    Function GetStatutesByChapter(ByVal aobjXmlGetStatuteRequestNode As XmlNode, ByVal aobjXMLNameSpaceManager As XmlNamespaceManager, ByVal aobjBroker As ServiceCatalog.Library.v4.Broker) As XmlDocument
    Dim objXmlRequestMessageDoc As XmlDocument
    Dim objXmlResponseMessageDoc As XmlDocument
    Dim intCount As Integer
    aobjBroker.PostMessageWarehouseInformationalMessage("Chapter found.", 1)
    objXmlResponseMessageDoc = New XmlDocument
    'Add the first element into the document GetStatuteByChapter with its namespace
    objXmlResponseMessageDoc.AppendChild(objXmlResponseMessageDoc.CreateElement("BasicSearchQueryResponse", "http://crimnet.state.mn.us/mnjustice/statute/service/4.0"))
    'Build the initial response document
    objXmlResponseMessageDoc = New XmlDocument
    'Add the first element into the document GetStatutesResponse with its namespace
    objXmlResponseMessageDoc.AppendChild(objXmlResponseMessageDoc.CreateElement("GetStatutesResponse", "http://www.courts.state.mn.us/StatuteService/1.0"))
    'Add a child node to the GetStatutesResponse node
    objXmlResponseMessageDoc.SelectSingleNode("ss:GetStatutesResponse", aobjXMLNameSpaceManager).AppendChild(objXmlResponseMessageDoc.CreateElement("StatutesXml", "http://www.courts.state.mn.us/StatuteService/1.0"))
    objXmlResponseMessageDoc.SelectSingleNode("ss:GetStatutesResponse/ss:StatutesXml", aobjXMLNameSpaceManager).AppendChild(objXmlResponseMessageDoc.CreateElement("Statutes", "http://www.courts.state.mn.us/StatuteService/1.0"))
    'Convert the node Statutes into an element and set the runType attribute (runType="Request") by adding it's value Request
    CType(objXmlResponseMessageDoc.SelectSingleNode("ss:GetStatutesResponse/ss:StatutesXml/ss:Statutes", aobjXMLNameSpaceManager), System.Xml.XmlElement).SetAttribute("runType", "Request")
    'Convert the node Statutes into an element and set the attribute (runDateTime="2015-03-05T10:29:40") by adding it
    CType(objXmlResponseMessageDoc.SelectSingleNode("ss:GetStatutesResponse/ss:StatutesXml/ss:Statutes", aobjXMLNameSpaceManager), System.Xml.XmlElement).SetAttribute("runDateTime", Format(Now, "yyyy-MM-ddTHH:mm:ss"))
    'Create the BCA request message
    objXmlRequestMessageDoc = New XmlDocument
    objXmlRequestMessageDoc.AppendChild(objXmlRequestMessageDoc.CreateElement("ns:BasicSearchQueryRequest", aobjXMLNameSpaceManager.LookupNamespace("ns")))
    objXmlRequestMessageDoc.SelectSingleNode("ns:BasicSearchQueryRequest", aobjXMLNameSpaceManager).AppendChild(objXmlRequestMessageDoc.CreateElement("ns1:BasicSearchCriteria", aobjXMLNameSpaceManager.LookupNamespace("ns1")))
    objXmlRequestMessageDoc.SelectSingleNode("ns:BasicSearchQueryRequest/ns1:BasicSearchCriteria", aobjXMLNameSpaceManager).AppendChild(objXmlRequestMessageDoc.CreateElement("ns2:Chapter", aobjXMLNameSpaceManager.LookupNamespace("st")))
    objXmlRequestMessageDoc.SelectSingleNode("ns:BasicSearchQueryRequest/ns1:BasicSearchCriteria", aobjXMLNameSpaceManager).AppendChild(objXmlRequestMessageDoc.CreateElement("ns2:Section", aobjXMLNameSpaceManager.LookupNamespace("st")))
    objXmlRequestMessageDoc.SelectSingleNode("ns:BasicSearchQueryRequest/ns1:BasicSearchCriteria", aobjXMLNameSpaceManager).AppendChild(objXmlRequestMessageDoc.CreateElement("ns2:Subdivision", aobjXMLNameSpaceManager.LookupNamespace("st")))
    'Uncomment last working section below
    objXmlRequestMessageDoc.DocumentElement.SelectSingleNode("ns1:BasicSearchCriteria/st:Chapter", aobjXMLNameSpaceManager).InnerText = aobjXmlGetStatuteRequestNode.SelectSingleNode("ss:Statute/ss:Chapter", aobjXMLNameSpaceManager).InnerText
    'check if there is a section and or subdivision if it is there then set the value
    If Not (aobjXmlGetStatuteRequestNode.SelectSingleNode("ss:Statute/ss:Section", aobjXMLNameSpaceManager) Is Nothing) Then
    objXmlRequestMessageDoc.DocumentElement.SelectSingleNode("ns1:BasicSearchCriteria/st:Section", aobjXMLNameSpaceManager).InnerText = aobjXmlGetStatuteRequestNode.SelectSingleNode("ss:Statute/ss:Section", aobjXMLNameSpaceManager).InnerText
    End If
    If Not (aobjXmlGetStatuteRequestNode.SelectSingleNode("ss:Statute/ss:Subdivision", aobjXMLNameSpaceManager) Is Nothing) Then
    objXmlRequestMessageDoc.DocumentElement.SelectSingleNode("ns1:BasicSearchCriteria/st:Subdivision", aobjXMLNameSpaceManager).InnerText = aobjXmlGetStatuteRequestNode.SelectSingleNode("ss:Statute/ss:Subdivision", aobjXMLNameSpaceManager).InnerText
    End If
    'check if there is a section and or subdivision if it is there then set the value
    aobjBroker.PostMessageWarehouseSnapshot(objXmlRequestMessageDoc.OuterXml, "Request Message", 1)
    'Call the BCA service
    intCount = 0
    'This is where I want to use a For loop to check for the statutes found using the Chapter
    'Loop through each Id
    'For Each objXmlStatuteIdNode In aobjXmlGetStatuteRequestNode.SelectNodes("ss:Statute/ss:StatuteId/ss:Id[string-length(.)>0]", aobjXMLNameSpaceManager)
    'Create the BCA request message
    'objXmlRequestMessageDoc = New XmlDocument
    'objXmlRequestMessageDoc.AppendChild(objXmlRequestMessageDoc.CreateElement("ns:SingleStatuteRequest", aobjXMLNameSpaceManager.LookupNamespace("ns")))
    'objXmlRequestMessageDoc.SelectSingleNode("ns:SingleStatuteRequest", aobjXMLNameSpaceManager).AppendChild(objXmlRequestMessageDoc.CreateElement("ns:statuteId", aobjXMLNameSpaceManager.LookupNamespace("ns")))
    'objXmlRequestMessageDoc.DocumentElement.SelectSingleNode("ns:statuteId", aobjXMLNameSpaceManager).InnerText = objXmlStatuteIdNode.InnerText aobjBroker.PostMessageWarehouseSnapshot(objXmlRequestMessageDoc.OuterXml, "Request Message", 1)
    'intCount = intCount + 1
    'objXmlBcaResponseDoc = New XmlDocument
    'File name is BCASearchQueryResponse.xml
    'objXmlBcaResponseDoc.Load("\\j00000swebint\mscapps\deve\appfiles\temp\BCASearchQueryResponse.xml")
    'objXmlResponseMessageDoc.DocumentElement.SelectSingleNode("ss:StatutesXml/ss:Statutes", aobjXMLNameSpaceManager).AppendChild(objXmlResponseMessageDoc.ImportNode(objXmlBcaResponseDoc.DocumentElement.SelectSingleNode("ns1:Statute", aobjXMLNameSpaceManager), True))
    'Next
    'Count how many Statute nodes found
    CType(objXmlResponseMessageDoc.SelectSingleNode("ss:BasicSearchQueryResponse/ss:StatutesXml/ss:Statutes", aobjXMLNameSpaceManager), System.Xml.XmlElement).SetAttribute("totalCount", CStr(intCount))
    Return objXmlResponseMessageDoc
    End Function

    What is XPath and what does it do that you're impressed with?
    Yes, I see your link, but give me the abbreviated elevator speech on what it is please. It has me curious.
    http://searchsoa.techtarget.com/definition/XPath
    http://www.techrepublic.com/article/easily-navigate-xml-with-vbnet-and-xpath/
    http://www.techrepublic.com/article/using-xpath-string-functions-in-xslt-templates/
    The way that all this is being used by me now on a project is the HTML controls on the screen are built by XML not only about what the controls are and their attributes,   but the data from from the database is XML too with both going through transfermations
    vis XSLT as the HTML controls are built dynamically by XML data for the controls and the XML database data with decision being made in the transfermation on the fly.
    There are many usages with Xpath not just this one I am talking about with Xpath. You can do the same kind of thing with XAML and WPF forms as they are dynamically built. But it goes well beyond what I am talking about and the usage of Xpath. Xpath 3.0
    is the latest version. 
    http://www.balisage.net/Proceedings/vol10/html/Novatchev01/BalisageVol10-Novatchev01.html
    Thanks - I'll look into that at some point.
    Still lost in code, just at a little higher level.

  • Using URLLoader to send and load multiple xml nodes

    I am trying to use the URLLoader class to send and load
    multiple chunks of xml to a php script. Essentially I have the
    following bit of XML:
    <pages>
    <page>page children here</page>
    <page>more page children here</page>
    <page>even more page children here</page>
    </pages>
    I'm using e4x to loop through the XML and isolate each page
    node. I then want to send each node to a php script to be written
    to a .xml file on the server.
    I've tried inserting the URLLoader.load method within the
    loop but it only sends the last iteration. Do I have to create a
    new URLLoader instance for each iteration and if so is there a way
    to dynamically set the instance names?
    I'm new to 3.0 and have had success doing this in 2.0. I
    mostly want to get it right and in good form.
    Thanks for any help!

    The URLLoader class allows you to send and load data in the
    same pass. As help suggests...sendToURL Sends a URL request to a
    server, but ignores any response. To examine the server response,
    use the URLLoader.load() method instead. The send and load works
    fine, my issue is with needing to send multiple xml chunks using a
    loop.
    Here's the basics of the code I'm using. I was thinking that
    the try{....} section could be put in a loop attempting to send
    multiple items to the PHP page but only the last iteration is
    actually sent. I know I'm making a fundamental error here but need
    direction.
    var urlLoader:URLLoader = new URLLoader();
    urlLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
    urlLoader.addEventListener(Event.COMPLETE, handleComplete);
    urlLoader.addEventListener(IOErrorEvent.IO_ERROR,
    ioErrorHandler);
    var variables:URLVariables = new URLVariables();
    variables.xml = "<some_node>some
    child</some_node>";
    var request:URLRequest = new
    URLRequest("sendAndLoadXML.php");
    request.method = URLRequestMethod.POST;
    request.data = variables;
    for each(blah){
    try {
    sendToURL(request);
    } catch (error:Error) {
    trace(\n***\nUnable to load requested document." + error);
    }

  • Xs:group refs and "ORA-30936: Maximum number (1) of XML nodes exceeded'

    We registered a subset of the IBM DITA schemas in Oracle XDB. These schemas contain a lot of xs:group definitions where references to these groups contain "minOccurs" and "maxOccurs" atttributes, for instance:
    <xs:group name="category">
    <xs:sequence>
    <xs:element ref="category"/>
    </xs:sequence>
    </xs:group>
    <xs:complexType name="metadata.class">
    <xs:sequence>
    <xs:group ref="audience" minOccurs="0" maxOccurs="unbounded"/>
    <xs:group ref="category" minOccurs="0" maxOccurs="unbounded"/>
    <xs:group ref="keywords" minOccurs="0" maxOccurs="unbounded"/>
    <xs:group ref="prodinfo" minOccurs="0" maxOccurs="unbounded"/>
    <xs:group ref="othermeta" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="mapkeyref" type="xs:string"/>
    <xs:attributeGroup ref="global-atts"/>
    <xs:attribute ref="class" default="- topic/metadata "/>
    </xs:complexType>
    When we create an instance document that contains more than one "category" element under the element "metadata" element, like:
    <metadata>
    <audience type="purchaser" othertype="" job="using" otherjob="" experiencelevel="general"/>
    <category/>
    <category/>
    </metadata>
    we get the error: ORA-30936: Maximum number (1) of 'category' XML node elements exceeded
    This error is not consistent with the schema and XML parsers like Xerces and the Oracle "XDK parser" think the instance is fine.
    When we skip the reference to the group and reference the element definition "category" directly the problem is gone:
    <xs:complexType name="metadata.class">
    <xs:sequence>
    <xs:group ref="audience" minOccurs="0" maxOccurs="unbounded"/>
    <xs:element ref="category" minOccurs="0" maxOccurs="unbounded"/>
    <xs:group ref="keywords" minOccurs="0" maxOccurs="unbounded"/>
    <xs:group ref="prodinfo" minOccurs="0" maxOccurs="unbounded"/>
    <xs:group ref="othermeta" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="mapkeyref" type="xs:string"/>
    <xs:attributeGroup ref="global-atts"/>
    <xs:attribute ref="class" default="- topic/metadata "/>
    </xs:complexType>
    In this case the problems for the other group references like "audience" remain.
    It looks like Oracle XDB doesn't honor the cardinality attributes "minOccurs" and "maxOccurs" on xs:group elements that are references. Does anyone experienced similar problems?
    Thanks,
    Maarten

    This sounds like bug 5204107. You'll need to open a tar with Oracle Support if you need a fix for this..
    It happens when a group is used once without a maxOccurs and then later with a maxOccurs.
    The workaround is 'in-line' the group before registering the XML Schema. This can be done as follows (assuming the group definition and reference are in the same XML Schema)..
    procedure expandGroup(xmlschema in out xmltype, groupName varchar2,xsdDirectory varchar2)
    is
      xsdSchemaPath varchar2(512);
      groupModel xmltype;
      sequenceModel xmlType := xmlType('<xsd:sequence ' || xdb_namespaces.XMLSCHEMA_PREFIX_XSD || '><xsd:sequence/></xsd:sequence>');
      maxOccursValue binary_integer;
    begin
      -- FInd the Group Definition
      if xmlSchema.existsNode('/xsd:schema//xsd:group[@ref="' || groupName || '"]',NAMESPACES) = 1 then
        if xmlSchema.existsNode('/xsd:schema/xsd:group[@name="' || groupName || '"]',NAMESPACES) = 1 then
          select extract
                   xmlSchema,
                   '/xsd:schema/xsd:group[@name="' || groupName || '"]',
                   NAMESPACES
            into groupModel
            from dual; 
        else
          dbms_output.put_line('xsdDirectory = ' || xsdDirectory);
          select PATH,
                 extract
                   CONTENTS,
                   '/xsd:schema/xsd:group[@name="' || groupName || '"]',
                   NAMESPACES
            into xsdSchemaPath, groupModel
            from (
                   select PATH, xdburitype(path).getXML() CONTENTS
                     from PATH_VIEW
                    where under_path(res,xsdDirectory) = 1
           where existsNode
                   CONTENTS,
                   '/xsd:schema/xsd:group[@name="' || groupName || '"]',
                   NAMESPACES
                 ) = 1;
           dbms_output.put_line('Resolved ' || groupModel.extract('/xsd:group/@name',NAMESPACES).getStringVal() || ' in Schema ' || xsdSchemaPath);
        end if;
        if groupModel.existsNode('/xsd:group/xsd:annotation',NAMESPACES) = 1 then
          select deleteXML
                   groupModel,
                   '/xsd:group/xsd:annotation',
                   NAMESPACES
            into groupModel
            from dual;
        end if;
        -- create a sequence that can be placed in-line in the XML Schema to replace the <group ref=""/>
        groupModel := groupModel.extract('/xsd:group/*',NAMESPACES);
        select updateXML
                 sequenceModel,
                 '/xsd:sequence/xsd:sequence',
                groupModel,
                 NAMESPACES
          into sequenceModel
          from dual;
        if xmlSchema.existsNode('/xsd:schema//xsd:group[@ref="' || groupName || '" and not(@maxOccurs)]',NAMESPACES) = 1 then
          select updateXML
                   xmlSchema,
                   '/xsd:schema//xsd:group[@ref="' || groupName || '" and not(@maxOccurs)]',
                  sequenceModel,
                   NAMESPACES
            into xmlSchema
            from dual;
        end if;
        select insertChildXML
                 sequenceModel,
                 '/xsd:sequence',
                 '@maxOccurs',
                 'unbounded',
                 NAMESPACES
          into sequenceModel
          from dual;
        if xmlSchema.existsNode('/xsd:schema//xsd:group[@ref="' || groupName || '" and @maxOccurs="unbounded"]',NAMESPACES) = 1 then
          select updateXML
                   xmlSchema,
                   '/xsd:schema//xsd:group[@ref="' || groupName || '" and @maxOccurs="unbounded"]',
                   sequenceModel,
                   NAMESPACES
            into xmlSchema
            from dual;
        end if;
        while xmlschema.existsNode('/xsd:schema//xsd:group[@ref="' || groupName || '"]',NAMESPACES) = 1 loop
          maxOccursValue := xmlSchema.extract('/xsd:schema//xsd:group[@ref="' || groupName || '"]/@maxOccurs').getNumberVal();
          select updateXML
                   sequenceModel,
                  '/xsd:sequence/@maxOccurs',
                   maxOccursValue,
                   NAMESPACES
            into sequenceModel
            from dual;
          select updateXML
                   xmlSchema,
                   '/xsd:schema//xsd:group[@ref="' || groupName || '" and @maxOccurs="' || maxOccursValue || '"]',
                   sequenceModel,
                   NAMESPACES
            into xmlSchema
            from dual;
        end loop;
      end if;
    end;
    --

  • Archiving  and Deleting of XML Messages in SAP NetWeaver PI 7.31 single stack

    Hello my XI friends!
    Need step by Step Guide to Archiving
    and Deleting of XML Messages in
    SAP NetWeaver PI 7.31 single stack
    Similar to these instructions
    http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/e0afdd69-a8a7-2d10-7e9a-cbf6fa21c5a7?quicklink=index&overridelayout=true
    Regards,
    Rinaz

    Please check the below blog  for archiving java only-(XMLDAS)
    http://scn.sap.com/community/pi-and-soa-middleware/blog/2011/11/16/aae-archiving-in-sap-pi-711-with-xmldas
    For deletion there is standard delete job..
    https://help.sap.com/saphelp_nw73ehp1/helpdata/en/48/b2e0036b156ff4e10000000a42189b/frameset.htm
    Message was edited by: Hareesh Gampa

  • Delete parent node based on its child node value in XML

    I have an xml like this:
    <UPLOAD_REQUEST>
         <CUSTOMER_DETAIL>
         <NAME>Smith</NAME>
         <AGE>20</AGE>
         <GENDER>M</GENDER>
         </CUSTOMER_DETAIL>
         <CUSTOMER_DETAIL>
         <NAME>Nikita</NAME>
         <AGE>35</AGE>
         <GENDER>F</GENDER>
         </CUSTOMER_DETAIL>
    </UPLOAD_REQUEST>
    I want to delete CUSTOMER_DETAIL node where name = 'nikita' from xml. Also note that there is no identification number for CUSTOMER_DETAIL node.
    I was trying to do it like this:
    UPDATE request_xml
    SET request= deleteXML(request, '/UPLOAD_REQUEST/CUSTOMER_DETAIL')
    WHERE extractvalue(request, '/UPLOAD_REQUEST/CUSTOMER_DETAIL/NAME') = 'Nikita';
    It gives error "*EXTRACTVALUE returns value of only one node*"
    Final output should be
    <UPLOAD_REQUEST>
         <CUSTOMER_DETAIL>
         <NAME>Smith</NAME>
         <AGE>20</AGE>
         <GENDER>M</GENDER>
         </CUSTOMER_DETAIL>
    </UPLOAD_REQUEST>
    Can anyone please help me how to do this?
    Edited by: user10446917 on May 6, 2011 3:38 AM

    Add a predicate in the XPath expression :
    UPDATE request_xml
    SET request = deleteXML(request, '/UPLOAD_REQUEST/CUSTOMER_DETAIL[NAME="Nikita"]')
    ;

  • How to identify and delete objects after failure of registering XML schema

    Hi,
    I have tried to register a XML schema with many global elements but failed.
    I have checked the view DBA_XML_SCHEMA and found that there is an entry for this failed XML schema and the disk spaces would not be freed after the failure of registration as well.
    I have tried DBMS_XMLSCHEMA.deleteSchema() with DELETE_CASCADE_FORCE but failed with ORA-31000: Resource is not XDB document.
    How can I identify and delete the objects for this failed XML schema and free up the disk space ?
    I would not prefer to use 'DROP USER ... CASCADE' since there are other objects owned by this user.
    Thanks in advance.

    you can get them from user_objects.
    but you have to identify them manuallly if your schema has other objects other then created by the xml schema creation process.
    Note these objects will be cases senistitive. so you should enclose them with double quotes during deletion.

  • Delete xml messagetype tag and xml versioning tag in target xml file

    Hi experts.
    i want to delete the xml version, starting (<MT_ZMPSSERRMSGMST_SEND>*and ending </MT_ZMPSSERRMSGMST_SEND> tags in below message.
    here i am bold the tags which i want to delete. please help me how to delete this.
    <?xml version="1.0"; encoding="UTF-8"?>
    <MT_ZMPSSERRMSGMST_SEND>
       <MESSAGE>
          <TABLENAME/>
          <ACTION/>
          <RECORD>
             <ERRORID/>
             <ERRCLASSID/>
             <SHORTDESC/>
             <DESCRIPTION/>
             <RESOLVE/>
          </RECORD>
       </MESSAGE>
    </MT_ZMPSSERRMSGMST_SEND>

    Hi Srinivas,
    You can delete the required content of the XML by editing the XML.
    Develop a custom adapter module and use the below code to edit the xml and deleting the highlighted content
    // to read the input XML
    strData = xmlData.getText();
    // get the length of <?xml version="1.0"; encoding="UTF-8"?> <MT_ZMPSSERRMSGMST_SEND>
    int strheaderlength = (strData.substring(0,strData.indexOf("<Message>")).length());
    // read the data from <MESSAGE>  to </MESSAGE>
    String payload=strData.substring(strheaderlength,strData.startIndexOf("</MT_ZMPSSERRMSGMST_SEND>"))
    // set the new payload to xmlData
    xmlData.setText(payload);
    appreciate if useful

Maybe you are looking for

  • Error 6 in Update rules

    Hi Friends I am getting the following error when loading the data. ERROR 6 in UPDATE. When i check the Details tab in the RSMO i find that it has finshed the udapte rules succefully but failed while processing step. If any came across this type of er

  • Nokia 5530 XM Touchscreen (red button) not working...

    I bought my nokia 5530 for about 4 months and i had dropped it a couple of times.. But before that it did not experience any serious damage. It was until recent i accidently dropped it AGAIN and i found out that the red button is not working anymore.

  • Failing at ACR step in process chain?

    Hi,   Could any body explain on this topic? In process chain job mostly the chain was failing at ACR(attribute change run) step. that it is materdata ACR step.i want permanent solution for this step? I want find why this ACR step is failing weekly tw

  • Connection pooling  in Tomcat

    Hello all, I've been using tomcat 5.0.27 and for quite sometime now using the connection pooling on tomcat as well. I configure DataSource(no.of connections,username, password etc) by logging into tomcat admin console. But what I've seen is it adds d

  • Enormous Unwanted Gray Lines and Spaces Between Pages?

    Does anyone know how to get rid of those **** things? what happened to the thin, little dotted line that separate pages and kept everything tight & together?