How to remove empty tags respecting the schema contraints?

Hi,
I'm generating an XML document with XSLT. This document have some empty tags. My question is about to remove all empty tags only if they are defined as optionnals in the schema.
Is this possible with the DOM?
Thanks in advance,
Philippe

With DOM3 validation api, elements/attributes may be checked if they may be removed.
-Check if the element is empty; getFirstChild() method returns null.
-Check if the element may be removed with DOM 3 Validation API.

Similar Messages

  • How to remove empty tags from XML

    Hello,
    I have a XML file which contains some empty tags and some values with "?". I need to remove all empty tags and tags which have a value "?".
    Sample Data:
    <a>
    <b></b>
    <c> Hello </c>
    <d>world ?</d>
    <e>oracle</e>
    </a>
    Expected result:
    <a>
    <c> Hello </c>
    <e>oracle</e>
    </a>
    Thank you for your time.
    Thanks,
    Edited by: 850749 on Apr 7, 2011 6:25 PM

    Dear Odie,
    May I make your example a bit more complicated by adding an additional complexType, please:
    ---Original ----
    <DEPT>
    <EMPID>1</EMPID>
    <EMPNAME>Martin Chadderton</EMPNAME>
    <SALARY>??</SALARY>
    <SALARYq></SALARYq>
    </DEPT>
    ----- New ----
    <DEPT>
    <EMPID>1</EMPID>
    <EMPNAME>Martin Chadderton</EMPNAME>
    <SALARY>??</SALARY>
    <SALARYq></SALARYq>
    <EMPLMNT_HISTORY>
    <DEVISION>1</DEVISION>
    <FROM_DATE>2011-01-01 </FROM_DATE>
    <TO_DATE></TO_DATE>
    </EMPLMNT_HISTORY>
    </DEPT>
    Your solution works perfectly for <SALARY>, but how would you suggest also to deal with <TO_DATE> ?
    Massive thanks for your help!
    N.B. Just to emphasise, in my case I have 3 levels (complexType > complexType > complexType) and many elements and I would like to know if there is any generic option to say
    to remove all the empty elements from the result, as it causes to the SSJ (Systinet) Webservice to crash.

  • How to remove empty tags from a config file

    Hi all,
    I have a task where we need to run a Java program to remove tags which do not contain ny information from the config files. The format of the file is as under:
    <roleManager>
         <providers>
              <add name="AspNetSqlRoleProvider" b03f5f7f11d50a3a" />
              <add name="AspNetWindowsTokenRoleProvider" PublicKeyToken=b03f5f7f11d50a3a" />
         </providers>
    </roleManager>
    <httpModules>
    </httpModules>
    In the above lines <roleManager> is a tag which contains some data, while <httpModules> is an empty tag and does not conatin any data. The resultant should be:
    <roleManager>
         <providers>
              <add name="AspNetSqlRoleProvider" b03f5f7f11d50a3a" />
              <add name="AspNetWindowsTokenRoleProvider" PublicKeyToken=b03f5f7f11d50a3a" />
         </providers>
    </roleManager>
    Please suggest how can we achieve this?
    Thanks in advance

    I ususally do that type of thing with a state machine... read a token, look for what is next, and if it's the closing token, I don't write it out. You have well defined opening token syntax and closing token syntax, so it should be relatively easy.

  • How to remove empty tag.

    Hi,
    I have a scenario IDOC-XI-JDBC
    From IDOC we are using change pointers and when something has been changed then those fields are being sent out but other few empty fields were coming out and to avoid that I used mapWithDefault to avoid the empty tags as  target system used to error out.
    But now when any field is empty coming from change pointer is also being caught in mapWithDefault....whereas it is expected to send blank.
    Can anyone of you suggest any solution.
    Regards
    Ria

    Hi Ria,
    You can use if without else and check the field exist or not in the source and then map it to target.
    This is a bit tricky & if you dont feel comfortable with it, then use advanced UDF, and explicitely check ResultList.SUPPRESS object and remove it in UDF and form an output stream.
    You can use any of the two.
    Regards,
    Shri.
    <removed by moderator>
    Edited by: Mike Pokraka on Jul 28, 2008 5:05 PM

  • How to remove html tags from the pdf file ?

    Hello,
    Using BI publisher we are generating a pdf file. In the table, we have data which contains html tags. for example " test1<br> 2.test2<br> 3.test3<br> ".
    In the pdf file we need to get the output like this
    test1
    test2
    test3
    But the output is as follows :"test1<br> 2.test<br> 3.test3<br> "
    Any idea, how these html tags can be removed from the pdf file and obtain the required result?
    Thanks in advance!!
    Archana

    Archana,
    Can you wrap your code in <code> tags (use square brackets rather than angled ones), as the forum software is interpretting the HTML tags, in other words we can't see what you mean ;)
    In any case, there are a few different options (guessing at what your problem is, without seeing the actual data), you could use htf.escape_sc or replace, regexp_replace etc to substitute the values before you output them to your PDF.
    Hope this helps,
    John.
    Blog: http://jes.blogs.shellprompt.net
    Work: http://www.apex-evangelists.com
    Author of Pro Application Express: http://tinyurl.com/3gu7cd
    REWARDS: Please remember to mark helpful or correct posts on the forum, not just for my answers but for everyone!

  • How to remove blank spaces in the source code of my page?

    I created a page with the following code for testing:
    <dsp:page>
    <dsp:importbean bean="/atg/commerce/catalog/ProductLookup"/>
         <dsp:droplet name="ProductLookup">
              <dsp:param name="id" value="xprod2046" />
              <dsp:param name="elementName" value="product" />
              <dsp:oparam name="output">
                   <dsp:valueof param="product.DisplayName"/>
              </dsp:oparam>
         </dsp:droplet>
    </dsp:page>
    It only shows the product name in the browser. But if I look at the source code of my page he created 61 lines in response to this code, where a line is the product name and the other 60 have nothing.
    I know how to remove these lines that the ATG creates no content because my project is full of these empty lines.
    Anyone ever had this problem and could help me?
    Thanks

    Hi ,
    Yup this is a problem ,
    you can use following ways :
    1- use jsp comments eg :
    <dsp:page>
    <dsp:importbean bean="/atg/commerce/catalog/ProductLookup"/><%--
         ----%><dsp:droplet name="ProductLookup"><%--
              ----%><dsp:param name="id" value="xprod2046" /><%--
              ----%><dsp:param name="elementName" value="product" /><%--
              ----%><dsp:oparam name="output"><%--
                   ----%><dsp:valueof param="product.DisplayName"/><%--
              ----%></dsp:oparam><%--
         ----%></dsp:droplet><%--
    ----%></dsp:page>
    2- End tags at next line :
    e g :
    * <dsp:page
    * ><dsp:droplet name=”xyz”
    * ><dsp:oparam name=”output”
    * >Name: <dsp:valueof param=”abc”
    * /></dsp:oparam
    * ></dsp:droplet
    * ></dsp:page>
    3- Always use TAB instead of using SPACEBAR whie writing source code.
    4 - From JSP 2.1 onwards we have a page directive trimwhitespaces ( see if that works , i was not able to ), google for it for more info
    5 - You can modify your build scripts to remove white spaces from jsps while building EAR.(complex though, as you may not want to trim all white space.)
    6 - modifying the deployment descriptor.
    <init-param>
    <param-name>trimSpaces</param-name>
    <param-value>true</param-value>
    </init-param>

  • How to remove  'Empty Demarcation'  in Text Elements.

    Dear All,
    To remove 'Empty demarcation' in the WAD output, I had modified the standard program - SAPLRSSV (for this i took  access key from SAP). 
    The text element : 301 was changed to blank  and it worked.
    Recently we had a support package upgrade to SAPKW70018. With this upgrade my previous change to the program got reverted back and so i need to do the change again.
    However,  I'm not able to retrieve the list of Text elements for this program (SAPLRSSV). I open the program and when i go to Text element,  following message is displayed :
    "Untranslated texts from master language DE will  also be displayed"
    But no list (no text elements) is displayed.
    My question : How do i retrieve this list  and can i use the same acess key again or do i need to take another one from SAP.
    Regards,
    Nagendra.

    Sorry, I was referring to the incorrect program SAPLRSSV instead of SAPLRRSV.  The problem has been resolved.
    Regards,
    Nagendra.

  • How to remove empty lines from xml files after removing nodes from document

    <pre>
    Hi
    <b>i have xml document, which is shown below
    after removing some nodes from the document ,i am getting empty lines in place of removed nodes,how to resolve this and get the proper xml document without any errors</b>
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE Message SYSTEM "TRD01.dtd">
    <Message>
    <Header>
    <CounterPartyType>CLIENT</CounterPartyType>
    <CreationTime>20134455</CreationTime>
    <ErrorCode>363 </ErrorCode>
    <ErrorEnterPriseId>N</ErrorEnterPriseId>
    <ErrorStatus>1</ErrorStatus>
    <ErrorSystemId>STL</ErrorSystemId>
    <ErrorTimes>31</ErrorTimes>
    <MessageType>T</MessageType>
    <RecipientEnterpriseId>N</RecipientEnterpriseId>
    <RecipentSystemId>EXM</RecipentSystemId>
    <Remarks>REMARSK</Remarks>
    <SenderEnterpriseId>N</SenderEnterpriseId>
    <SenderSystemId>TR</SenderSystemId>
    </Header>
    </Message>
    <ErrorCode>363 </ErrorCode>
    <ErrorEnterPriseId>NIHK</ErrorEnterPriseId>
    <ErrorStatus>1</ErrorStatus>
    <ErrorSystemId>STL</ErrorSystemId>
    <ErrorTimes>31</ErrorTimes>
    XPathExpression expression5 = xpath.compile(xmlpath5);
    Object result5 = expression5.evaluate(doc, XPathConstants.NODE);
    Node node5 = (Node) result5;
    node5.getParentNode().removeChild(node5);
    XPathExpression expression6 = xpath.compile(xmlpath6);
    Object result6 = expression6.evaluate(doc, XPathConstants.NODE);
    Node node6=(Node) result6;
    node6.getParentNode().removeChild(node6);
    XPathExpression expression7 = xpath.compile(xmlpath7);
    Object result7 = expression7.evaluate(doc, XPathConstants.NODE);
    Node node7=(Node) result7;
    node7.getParentNode().removeChild(node7);
    doc.normalize();
    doc.normalizeDocument();
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer t = tf.newTransformer();
    t.setOutputProperty(OutputKeys.INDENT, "yes");
    t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
    t.setOutputProperty(OutputKeys.METHOD,"xml");
    t.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
    the xml output i am getting is
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <Message>
    <Header>
    <CounterPartyType>CLIENT</CounterPartyType>
    <CreationTime>20134455</CreationTime>
    <MessageType>TRD01</MessageType>
    <RecipientEnterpriseId>N</RecipientEnterpriseId>
    <RecipentSystemId>STL</RecipentSystemId>
    <Remarks>REMARSK</Remarks>
    <SenderEnterpriseId>N</SenderEnterpriseId>
    <SenderSystemId>T</SenderSystemId>
    </Header>
    </Message>
    <b>could you please let me know how to avoid empty lines in the xml doucment output</b>
    this is the method i am using to get the result
    public void ValidateRecord(String xml){
    try{
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = factory.newDocumentBuilder();
    //parse file into DOM
    /*DOMParser parser = new DOMParser();
    parser.setErrorStream(System.err);
    parser.setValidationMode(DTD_validation);
    parser.showWarnings(true);*/
    System.out.println ("HI THIS xml is validation "+xml);
    Resolver res = new Resolver();
    db.setEntityResolver(res);
    Document doc = db.parse(new InputSource(new StringReader(xml)));
    XPathFactory xpf = XPathFactory.newInstance();
    XPath xpath = xpf.newXPath();
    // XPathExpression expression = xpath.compile("//A/B[C/E/text()=13]");
    String xmlpath="/Message/Header/CounterPartyType/text()";
    String xmlpath1="/Message/Header/RecipentSystemId/text()";
    String xmlpath2="/Message/Header/ErrorSystemId/text()";
    XPathExpression expression = xpath.compile(xmlpath);
    XPathExpression expression1 = xpath.compile(xmlpath2);
    Object result = expression.evaluate(doc, XPathConstants.NODE);
    Object result1 = expression1.evaluate(doc, XPathConstants.NODE);
    Node node = (Node) result;
    Node node1 = (Node) result1;
    System.out.println("the values of the string is " +node.getNodeValue());
    System.out.println("the values of the string is " +node1.getNodeValue());
    // for (int i = 0; i < nodes.getLength(); i++) {
    //System.out.println(nodes.item(i).getNodeValue());
    // CAHNGING THE RECEIPENT NODE
    XPathExpression expression2 = xpath.compile(xmlpath1);
    Object result2 = expression2.evaluate(doc, XPathConstants.NODE);
    Node node2 = (Node) result2;
    System.out.println(node2);
    node2.setNodeValue(node1.getNodeValue());
    System.out.println(node2);
    //removing the nodes from document
    String xmlpath3="/Message/Header/ErrorCode";
    String xmlpath4="/Message/Header/ErrorEnterPriseId";
    String xmlpath5="/Message/Header/ErrorStatus";
    String xmlpath6="/Message/Header/ErrorSystemId";
    String xmlpath7="/Message/Header/ErrorTimes";
    XPathExpression expression3 = xpath.compile(xmlpath3);
    Object result3 = expression3.evaluate(doc, XPathConstants.NODE);
    Node node3 = (Node) result3;
    node3.getParentNode().removeChild(node3);
    XPathExpression expression4 = xpath.compile(xmlpath4);
    Object result4 = expression4.evaluate(doc, XPathConstants.NODE);
    Node node4 = (Node) result4;
    System.out.println("node value");
    System.out.println(node4.getParentNode().getNodeName());
    node4.getParentNode().removeChild(node4);
    XPathExpression expression5 = xpath.compile(xmlpath5);
    Object result5 = expression5.evaluate(doc, XPathConstants.NODE);
    Node node5 = (Node) result5;
    node5.getParentNode().removeChild(node5);
    XPathExpression expression6 = xpath.compile(xmlpath6);
    Object result6 = expression6.evaluate(doc, XPathConstants.NODE);
    Node node6=(Node) result6;
    node6.getParentNode().removeChild(node6);
    XPathExpression expression7 = xpath.compile(xmlpath7);
    Object result7 = expression7.evaluate(doc, XPathConstants.NODE);
    Node node7=(Node) result7;
    node7.getParentNode().removeChild(node7);
    // Node b13Node = (Node) expression.evaluate(doc, XPathConstants.NODE);
    //b13Node.getParentNode().removeChild(b13Node);
    doc.normalize();
    doc.normalizeDocument();
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer t = tf.newTransformer();
    t.setOutputProperty(OutputKeys.INDENT, "yes");
    t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
    t.setOutputProperty(OutputKeys.METHOD,"xml");
    t.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
    t.transform(new DOMSource(doc), new StreamResult(System.out));
    catch (Exception e) {
         e.printStackTrace();
    System.out.println(e.getMessage());
    </pre>
    Edited by: user12185243 on Apr 6, 2013 6:38 AM
    Edited by: user12185243 on Apr 6, 2013 6:41 AM
    Edited by: user12185243 on Apr 6, 2013 6:43 AM
    Edited by: user12185243 on Apr 6, 2013 6:45 AM
    Edited by: user12185243 on Apr 6, 2013 9:00 AM

    either this way we can do this
    1)
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    <b> factory.setIgnoringElementContentWhitespace(true); </b>
    DocumentBuilder db = factory.newDocumentBuilder();
    or
    2)
    java.io.StringWriter sw = new java.io.StringWriter();
    StreamResult sr = new StreamResult(sw);
    t.transform(new DOMSource(doc), sr);
    String xml1 = sw.toString().trim();
    <b> xml1=xml1.replaceAll("\\s",""); </b>
    System.out.println(xml1.trim());

  • How to remove xmlns tag in Node level

    Hi Experts!
    How to remove xmlns tag in xml file, where only xmlns="". I do not want to remove if xmlns contains a value.
    I am using below xslt mapping, but it is removing all xmlns tags in a xml file. I want to remove only xmlns="" .
    please help me on this.
    Here is the code:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="http://www.arconw.com/XI/XSLT_Library/XmlNamespacePrefixRemoval"
    version="1.0">
    <xsl:output method = "xml" />
    <xsl:template match="/">
    <xsl:apply-templates select="*" mode="remprefix"/>
    </xsl:template>
    <xsl:template match="*" mode="remprefix">
    <xsl:variable name="newname" select="local-name(.)"/>
    <xsl:element name="{$newname}" namespace ="{namespace-uri()}">
    <xsl:apply-templates mode="copyall" select="@*|comment()|processing-instruction()|text()"/>
    <xsl:apply-templates select="*" mode="remprefix"/>
    </xsl:element>
    </xsl:template>
    <xsl:template mode="copyall" match="@*|comment()|processing-instruction()|text()">
    <xsl:copy>
    <xsl:apply-templates mode="copyall" select="@*|comment()|processing-instruction()|text()"/>
    </xsl:copy>
    </xsl:template>
    </xsl:stylesheet>
    Thanks,
    Hari

    Hi Hari,
    Please try this as an option:
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.io.StringWriter;
    import java.util.Map;
    import com.sap.aii.mapping.api.StreamTransformation;
    import com.sap.aii.mapping.api.StreamTransformationException;
    public class RemoveBlankNS implements StreamTransformation {
         private Map _param;    
         public void setParameter(Map param) {
              _param = param;
         public void execute(InputStream in, OutputStream out) throws StreamTransformationException {
              try {
                   byte[] bytes = new byte[in.available()];
                   in.read(bytes, 0, in.available());
                   String payload = new String(bytes, "UTF-8");               
                   payload = payload.replaceAll(" xmlns=\"\"", "");
                   out.write(payload.getBytes("UTF-8"));
              } catch (Exception e) {
                   StringWriter sw = new StringWriter();
                   PrintWriter pw = new PrintWriter(sw);
                   e.printStackTrace(pw);
                   throw new StreamTransformationException(sw.toString());
    Thanks,
    -Russ

  • How to remove available downloads from the list

    how to remove available downloads from the list without it resuming when i open itunes or check for available downloads?

    There is not a way to remove them from the list.  Just let them download, and then delete them from your library when they are done.

  • How to remove SD Card from the Card Reader slot - Satellite A100?

    Hi,
    Is there anyone to help me? I inserted a 64 MB SD card in the card reader slot of my Toshiba A100 model. It's the first time i have inserted the card. The card is inside the slot. I can not take it out! I don't have any idea how to remove the card from the card reader slot. I can see the contents of my SD card, can open the files too. But how to remove it out from the slot. Please help me giving your idea to remove the card out from the slot.
    Arjun

    Hi
    In my knowledge the SD card slot doesnt has a any additional helps like the PCMCIA slot to remove the card.
    You have to remove it simply. Try to grab the card and move it out. You can try to use the pair of tweezers. Maybe it helps

  • How to remove links pointing to the same page?

    I have PDF documents with Links which point to sections referenced (e.g. link of text "Section 2.2" points to the actual page number of "Section 2.2"), but as the links are created from cross-references during rendition from Word to PDF, there are cases that the destination page number and source page number of the links are the same (e.g. links of text "Section 2.2" on page 9 are created with the destination of page 9 which is the actual page number of "Section 2.2"), I want to remove all these links, but I don't know how to get the destination page, I check the API reference and find that "PDLinkAnnotGetAction" may work , but I don't know how to use it, could you check me codes below and advise ? Your help is really appreciated!
    PDPage page;
    ASInt32 i,i2;
    AVDoc avDoc = AVAppGetActiveDoc();
    PDDoc pdDoc = AVDocGetPDDoc (avDoc);
    int pageNum = PDDocGetNumPages(pdDoc);
    for (i = pageNum - 1; i >= 0; i--)
    page = PDDocAcquirePage(pdDoc, i);
    int annotNum = PDPageGetNumAnnots(page);
    for (i2 = annotNum - 1; i2 >= 0; i2--)
      if...
      PDPageRemoveAnnot(i, i2);
    My Product Information:
    Acrobat Pro 8.1.6, Windows

    Start by reading the PDF standard (ISO 32000-1) to understand Actions vs. Destinations.
    Then for each annot, you'll want to see which it has (and in the case of an Action, if it has more than one).  Then you need to parse the action or dest to see what it is and where it goes.  If you don't like it, then you'll delete it.
    From: Adobe Forums <[email protected]<mailto:[email protected]>>
    Reply-To: "[email protected]<mailto:[email protected]>" <[email protected]<mailto:[email protected]>>
    Date: Tue, 25 Oct 2011 09:25:32 -0700
    To: Leonard Rosenthol <[email protected]<mailto:[email protected]>>
    Subject: How to remove links pointing to the same page?
    How to remove links pointing to the same page?
    created by OALD<http://forums.adobe.com/people/OALD> in Acrobat SDK - View the full discussion<http://forums.adobe.com/message/3989576#3989576

  • How to remove unused objects from the webcatalog In OBIEE11g

    Hi,
    I want to delete unused objects from obiee11g catalog, i know in obiee10g it's working fine (i.e: we can do it via manage catalog then delete the unused objects) is there any way to do it automatically like RPD utility --->removing unused objects from Physical layer in RPD
    fyi: I don't want to delete manualy. i need somethink like button/link to find unused objects(report,filter,folder..etc) from my obiee11g catalog.
    Thanks
    Deva
    Edited by: Devarasu on Nov 29, 2011 12:06 PM
    Edited by: Devarasu on Nov 29, 2011 3:15 PM

    Hi,
    Checked with Oracle Support team and confirmed below points
    --> incorporated into the Current product and consider as BUG it may resolve future release
    --> Currently there isnt any automatic method to remove the unused objects like reports, filters,folder etc from catalog.
    Treated as Bug
    Bug 13440888 - AUTOMATICALLY REMOVE OF UNUSED CATALOG OBJECTS FROM WEBCATALOG
    FYI:
    SR 3-4984291131: How to remove unused objects from the webcatalog in obiee11g
    Thanks
    Deva

  • How to remove "all day" as the default setting in iCal?

    How to remove "all day" as the default setting in iCal? The iCloud calendar works by double-clicking but the local behaves differently.

    Hello Valerie,
    the default - "all day" or "time based" - depends on the view in iCal. In month view the default is "all day",
    in week view or day view it is a time interval, if you use "File -> New Event". If you add the event by double clicking into the calendar, it will depend on the section you are clicking - in the all day section you will add an all-day event, in the time-grid you will enter an event with start-end time.
    Regards
    Léonie

  • HT2500 Does anyone know how to remove a group from the address panel in mail?

    Does anyone know how to remove a group from the address panel in mail?

    I haven't seen too many questions like this on this forum.  Did you also try the photoshop forums?

Maybe you are looking for

  • K7n2 delta, won't allow me to connect to the internet via pci modem

    motherboard: K7n2 delta, nforce2 ultra won't allow me to connect to the internet via pci modem i have got 2 computers with same mobo, can connnect through external 56k but the 2 internal 56ks (one in each computer), will not connect. just dials then

  • Error in JDOM

    import java.io.File; import org.jdom.input.SAXBuilder; import org.jdom.output.XMLOutputter; import org.w3c.dom.Document; * PrettyPrinter.java public class PrettyPrinter     /** Creates a new instance of PrettyPrinter */     public PrettyPrinter()    

  • Browser not Opening when Exporting Files in Oracle 11i

    Hello , Does anyone have experience this issue? Mylast resort of holding the ctrl key is not anymore working. The browser is not totally loading. It seems that it is being killed, i dont know why since the POP up is already OFF in IE. Even when i'm v

  • OO ALV - Excluding unwanted custom function buttons

    Hi, I'm using CL_GUI_ALV_GRID class in a ALV program. I have various screens with the same toolbar, and i need to exclude one customer function, one button that i created, from this toolbar. The idea is not showing the same buttons in the various scr

  • How can I update the country of my Apple ID?

    I recently moved from Spain to the US and have been struggling to change the country origin of my Apple ID. Could anyone help? Do I need to create a new Apple ID?