Проблемы при разборе XML

0

Я обнаружил проблему при анализе XML файла

Это образец XML файла (в виде строки):

<ns:fetchXmlResponse xmlns:ns=\ " http: / ws.src.com \>
    <ns:return>
        <?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>
        <TemplateData>
            <TemplatePrescriptionData>
                <id>24</id>
                <noOfRefills>1</noOfRefills>
                <templateId>67</templateId>
                <templatePrescriptionMaintainanceId>0
                </templatePrescriptionMaintainanceId>
                <prescriptionName>Norco</prescriptionName>
                <prescriptionStrength>5/325</prescriptionStrength>
                <prescriptionUnit>mg</prescriptionUnit>
                <prescriptionForm>Tablet(s)</prescriptionForm>
                <prescriptionSignature>1-2tabs po q4-6 hours, prn
                </prescriptionSignature>
                <prescriptionWarnings></prescriptionWarnings>
                <prescriptionComments></prescriptionComments>
                <prescriptionQuantity>15</prescriptionQuantity>
                <statusCode>true</statusCode>
                <createDate>2009-07-22T00:00:00+05:30</createDate>
                <updateDate>2009-07-22T00:00:00+05:30</updateDate>
            </TemplatePrescriptionData>
            <TemplatePrescriptionData>
                <id>25</id>
                <noOfRefills>2</noOfRefills>
                <templateId>67</templateId>
                <templatePrescriptionMaintainanceId>0
                </templatePrescriptionMaintainanceId>
                <prescriptionName>Motrin
                </prescriptionName>
                <prescriptionStrength>600</prescriptionStrength>
                <prescriptionUnit>mg</prescriptionUnit>
                <prescriptionForm>Tablet(s)</prescriptionForm>
                <prescriptionSignature>1tab po q6 hours,
                </prescriptionSignature>
                <prescriptionWarnings></prescriptionWarnings>
                <prescriptionComments></prescriptionComments>
                <prescriptionQuantity>28</prescriptionQuantity>
                <statusCode>true</statusCode>
                <createDate>2009-07-22T00:00:00+05:30</createDate>
                <updateDate>2009-07-22T00:00:00+05:30</updateDate>
            </TemplatePrescriptionData>
            <TemplatePrescriptionData>
                <id>26</id>
                <noOfRefills>2</noOfRefills>
                <templateId>67</templateId>
                <templatePrescriptionMaintainanceId>0
                </templatePrescriptionMaintainanceId>
                <prescriptionName>Chlorhexidine</prescriptionName>
                <prescriptionStrength>0.12</prescriptionStrength>
                <prescriptionUnit>%</prescriptionUnit>
                <prescriptionForm>Mouth
                </prescriptionForm>
                <prescriptionSignature>rinse mouth bid
                </prescriptionSignature>
                <prescriptionWarnings></prescriptionWarnings>
                <prescriptionComments></prescriptionComments>
                <prescriptionQuantity>1</prescriptionQuantity>
                <statusCode>true</statusCode>
                <createDate>2009-07-22T00:00:00+05:30</createDate>
                <updateDate>2009-07-22T00:00:00+05:30</updateDate>
            </TemplatePrescriptionData>
            <TemplatePrescriptionData>
                <id>28</id>
                <noOfRefills>1</noOfRefills>
                <templateId>76</templateId>
                <templatePrescriptionMaintainanceId>0
                </templatePrescriptionMaintainanceId>
                <prescriptionName>Norco</prescriptionName>
                <prescriptionStrength>5/325</prescriptionStrength>
                <prescriptionUnit>mg</prescriptionUnit>
                <prescriptionForm>Tablet(s)</prescriptionForm>
                <prescriptionSignature>1-2tabs po q4-6 hours, prn
                </prescriptionSignature>
                <prescriptionWarnings></prescriptionWarnings>
                <prescriptionComments></prescriptionComments>
                <prescriptionQuantity>15</prescriptionQuantity>
                <statusCode>true</statusCode>
                <createDate>2009-07-22T00:00:00+05:30</createDate>
                <updateDate>2009-07-22T00:00:00+05:30</updateDate>
            </TemplatePrescriptionData>
            <TemplatePrescriptionData>
                <id>30</id>
                <noOfRefills>2</noOfRefills>
                <templateId>76</templateId>
                <templatePrescriptionMaintainanceId>0
                </templatePrescriptionMaintainanceId>
                <prescriptionName>Motrin
                </prescriptionName>
                <prescriptionStrength>600</prescriptionStrength>
                <prescriptionUnit>mg</prescriptionUnit>
                <prescriptionForm>Tablet(s)</prescriptionForm>
                <prescriptionSignature>1tab po q6 hours,prn
                </prescriptionSignature>
                <prescriptionWarnings></prescriptionWarnings>
                <prescriptionComments></prescriptionComments>
                <prescriptionQuantity>28</prescriptionQuantity>
                <statusCode>true</statusCode>
                <createDate>2009-07-22T00:00:00+05:30</createDate>
                <updateDate>2009-07-22T00:00:00+05:30</updateDate>
            </TemplatePrescriptionData>
            <TemplatePrescriptionData>
                <id>31</id>
                <noOfRefills>2</noOfRefills>
                <templateId>76</templateId>
                <templatePrescriptionMaintainanceId>0
                </templatePrescriptionMaintainanceId>
                <prescriptionName>Chlorhexidine</prescriptionName>
                <prescriptionStrength>0.12</prescriptionStrength>
                <prescriptionUnit>%</prescriptionUnit>
                <prescriptionForm>MouthRinse
                </prescriptionForm>
                <prescriptionSignature>rinse mouth bid(withexpectoration)
                </prescriptionSignature>
                <prescriptionWarnings></prescriptionWarnings>
                <prescriptionComments></prescriptionComments>
                <prescriptionQuantity>1</prescriptionQuantity>
                <statusCode>true</statusCode>
                <createDate>2009-07-22T00:00:00+05:30</createDate>
                <updateDate>2009-07-22T00:00:00+05:30</updateDate>
            </TemplatePrescriptionData>
            <TemplatePrescriptionData>
                <id>32</id>
                <noOfRefills>1</noOfRefills>
                <templateId>79</templateId>
                <templatePrescriptionMaintainanceId>0
                </templatePrescriptionMaintainanceId>
                <prescriptionName>Norco</prescriptionName>
                <prescriptionStrength>5/325</prescriptionStrength>
                <prescriptionUnit>mg</prescriptionUnit>
                <prescriptionForm>Tablet(s)</prescriptionForm>
                <prescriptionSignature>1-2tabs po q4-6 hours, prn</prescriptionSignature>
                <prescriptionWarnings></prescriptionWarnings>
                <prescriptionComments></prescriptionComments>
                <prescriptionQuantity>15</prescriptionQuantity>
                <statusCode>true</statusCode>
                <createDate>2009-07-22T00:00:00+05:30</createDate>
                <updateDate>2009-07-22T00:00:00+05:30</updateDate>
            </TemplatePrescriptionData>
            <TemplatePrescriptionData>
                <id>33</id>
                <noOfRefills>2</noOfRefills>
                <templateId>79</templateId>
                <templatePrescriptionMaintainanceId>0
                </templatePrescriptionMaintainanceId>
                <prescriptionName>Motrin
                </prescriptionName>
                <prescriptionStrength>600</prescriptionStrength>
                <prescriptionUnit>mg</prescriptionUnit>
                <prescriptionForm>Tablet(s)</prescriptionForm>
                <prescriptionSignature>1tab po q6 hours,prn</prescriptionSignature>
                <prescriptionWarnings></prescriptionWarnings>
                <prescriptionComments></prescriptionComments>
                <prescriptionQuantity>28</prescriptionQuantity>
                <statusCode>true</statusCode>
                <createDate>2009-07-22T00:00:00+05:30</createDate>
                <updateDate>2009-07-22T00:00:00+05:30</updateDate>
            </TemplatePrescriptionData>
        </TemplateData>
    </ns:return>
</ns:fetchXmlResponse>

Код:

var xmlDoc=loadXMLString(Above XML file);

//Then i'm fetching "ns:return" node(Which is also an XML file)
var returnNode = String(xmlDoc.getElementsByTagName("ns:return")[0].childNodes[0].nodeValue);

loadXMLString funciton

function loadXMLString(txt)
{
if (window.DOMParser)
  {
  parser=new DOMParser();
  xmlDoc=parser.parseFromString(txt,"text/xml");
  }
else // Internet Explorer
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async=false;
  xmlDoc.loadXML(txt);
  }

Теперь проблема - returnNode переменная returnNode имеет всего 4048 символов, связанных с целым xmlfile

Образец:

<?xml version=\"1.0\" encoding=\"UTF-8\"    standalone=\"yes\"?>
<TemplateData>
    <TemplatePrescriptionData>
        <id>24</id>
        <noOfRefills>1</noOfRefills>
        <templateId>67</templateId>
        <templatePrescriptionMaintainanceId>0</templatePrescriptionMaintainanceId>
        <prescriptionName>Norco</prescriptionName>
        <prescriptionStrength>5/325</prescriptionStrength>
        <prescriptionUnit>mg</prescriptionUnit>
        <prescriptionForm>Tablet(s)</prescriptionForm>
        <prescriptionSignature>1-2 tabs po q4-6 hours, prn
        </prescriptionSignature>
        <prescriptionWarnings></prescriptionWarnings>
        <prescriptionComments></prescriptionComments>
        <prescriptionQuantity>15</prescriptionQuantity>
        <statusCode>true</statusCode>
        <createDate>2009-07-22T00:00:00+05:30</createDate>
        <updateDate>2009-07-22T00:00:00+05:30</updateDate>
    </TemplatePrescriptionData>
    <TemplatePrescriptionData>
        <id>25</id>
        <noOfRefills>2</noOfRefills>
        <templateId>67</templateId>
        <templatePrescriptionMaintainanceId>0
        </templatePrescriptionMaintainanceId>
        <prescriptionName>Motrin </prescriptionName>
        <prescriptionStrength>600</prescriptionStrength>
        <prescriptionUnit>mg</prescriptionUnit>
        <prescriptionForm>Tablet(s)</prescriptionForm>
        <prescriptionSignature>1 tab po q6 hours, prn</prescriptionSignature>
        <prescriptionWarnings></prescriptionWarnings>
        <prescriptionComments></prescriptionComments>
        <prescriptionQuantity>28</prescriptionQuantity>
        <statusCode>true</statusCode>
        <createDate>2009-07-22T00:00:00+05:30</createDate>
        <updateDate>2009-07-22T00:00:00+05:30</updateDate>
    </TemplatePrescriptionData>
    <TemplatePrescriptionData>
        <id>26</id>
        <noOfRefills>2</noOfRefills>
        <templateId>67</templateId>
        <templatePrescriptionMaintainanceId>0
        </templatePrescriptionMaintainanceId>
        <prescriptionName>Chlorhexidine</prescriptionName>
        <prescriptionStrength>0.12</prescriptionStrength>
        <prescriptionUnit>%</prescriptionUnit>
        <prescriptionForm>Mouth Rinse</prescriptionForm>
        <prescriptionSignature>rinse mouth bid (with expectoration)
        </prescriptionSignature>
        <prescriptionWarnings></prescriptionWarnings>
        <prescriptionComments></prescriptionComments>
        <prescriptionQuantity>1</prescriptionQuantity>
        <statusCode>true</statusCode>
        <createDate>2009-07-22T00:00:00+05:30</createDate>
        <updateDate>2009-07-22T00:00:00+05:30</updateDate>
    </TemplatePrescriptionData>
    <TemplatePrescriptionData>
        <id>28</id>
        <noOfRefills>1</noOfRefills>
        <templateId>76</templateId>
        <templatePrescriptionMaintainanceId>0
        </templatePrescriptionMaintainanceId>
        <prescriptionName>Norco</prescriptionName>
        <prescriptionStrength>5/325</prescriptionStrength>
        <prescriptionUnit>mg</prescriptionUnit>
        <prescriptionForm>Tablet(s)</prescriptionForm>
        <prescriptionSignature>1-2 tabs po q4-6 hours, prn
        </prescriptionSignature>
        <prescriptionWarnings></prescriptionWarnings>
        <prescriptionComments></prescriptionComments>
        <prescriptionQuantity>15</prescriptionQuantity>
        <statusCode>true</statusCode>
        <createDate>2009-07-22T00:00:00+05:30</createDate>
        <updateDate>2009-07-22T00:00:00+05:30</updateDate>
    </TemplatePrescriptionData>
    <TemplatePrescriptionData>
        <id>30</id>
        <noOfRefills>2</noOfRefills>
        <templateId>76</templateId>
        <templatePrescriptionMaintainanceId>0
        </templatePrescriptionMaintainanceId>
        <prescriptionName>Motrin </prescriptionName>
        <prescriptionStrength>600</prescriptionStrength>
        <prescriptionUnit>mg</prescriptionUnit>
        <prescriptionForm>Tablet(s)</prescriptionForm>
        <prescriptionSignature>1 tab po q6 hours, prn</prescriptionSignature>
        <prescriptionWarnings></prescriptionWarnings>
        <prescriptionComments></prescriptionComments>
        <prescriptionQuantity>28</prescriptionQuantity>
        <statusCode>true</statusCode>
        <createDate>2009-07-22T00:00:00+05:30</createDate>
        <updateDate>2009-07-22T00:00:00+05:30</updateDate>
    </TemplatePrescriptionData>
    <TemplatePrescriptionData>
        <id>31</id>
        <noOfRefills>2</noOfRefills>
        <templateId>76</templateId>
        <templatePrescriptionMaintainanceId>0
        </templatePrescriptionMaintainanceId>
        <prescriptionName>Chlorhexidine</prescriptionName>
        <prescriptionStrength>0.12</prescriptionStrength>
        <prescriptionUnit>%</prescriptionUnit>
        <prescriptionForm>Mouth Rinse</prescriptionForm>
        <prescriptionSignature>rinse mouth bid (with expectoration)
        </pr

Примечание. Я попытался с jQuery но сначала он проверяет данные и выдает Invalid XML исключение Invalid XML.
Я также подтвердил этот файл, который показывает: "The processing instruction target matching "[xX][mM][lL]" is not allowed." в моем файле.
Может ли кто-нибудь помочь мне решить эту проблему или вы можете предложить мне какой-нибудь сложный способ справиться с этим типом файла XML?

  • 1
    попробуйте выполнить синтаксический анализ с помощью jquery tech.pro/tutorial/877/xml-parsing-with-jquery
  • 0
    @VinodLouis Нет друзей JQuery запрещено, поэтому проблема здесь
Показать ещё 2 комментария
Теги:
xml-parsing
ibm-mobilefirst

1 ответ

1

Xml внутри xml будет проблематичным, если он не обернут в <![CDATA[... ]]> который позволит вам получить внутренний XML в виде строки, которую вы могли бы разобрать...

var inner = xmlDoc.getElementsByTagName("return")[0].textContent;

или удалите инструкцию XML Processsing из внутреннего xml перед синтаксическим разбором, вам может потребоваться немного умнее, если ваш внешний XML тоже будет соответствовать PI.

var d= ...your xml...
d = d.replace( "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" , "" );
var xmlDoc = loadXMLString(d);

var templateData = xmlDoc.getElementsByTagName("TemplateData");
  • 0
    Да, это хороший вариант. Я думаю, что это будет работать, если я использую этот трюк с JQuery

Ещё вопросы

Сообщество Overcoder
Наверх
Меню