Я обнаружил проблему при анализе 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?
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");