【问题标题】:Issues while parsing xml解析xml时的问题
【发布时间】:2013-10-10 10:47:17
【问题描述】:

我在解析 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函数

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 变量只有 4048character 尽管整个 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 异常。
我还验证了这个文件,它在我的文件中显示 "The processing instruction target matching "[xX][mM][lL]" is not allowed."
谁能帮我解决这个问题,或者你能建议我一些棘手的方法来处理这种类型的 XML 文件吗?

【问题讨论】:

  • @VinodLouis 没有好友 jQuery 被禁止,这就是问题出在这里的原因
  • ‘禁止’是一部强作品……有什么问题?
  • 这就是我要告诉上级的!

标签: javascript jquery xml xml-parsing ibm-mobilefirst


【解决方案1】:

xml 中的 XML 会出现问题,除非它包含在 &lt;![CDATA[ ... ]]&gt; 中,这将允许您将内部 XML 作为字符串获取,然后您可以对其进行解析...

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

或者在解析之前从内部xml中删除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");

【讨论】:

  • 是的,这是一个不错的选择。我认为如果我将这个技巧与 jQuery 一起使用它会起作用
猜你喜欢
  • 2017-04-21
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多