JQuery - 查找XML属性值

时间:2018-04-06 23:42:31

标签: jquery xml

我为这个简单的问题道歉。我很害怕,虽然我理解VBA,VBScript,TSQL以及一些C#和Java,但JQuery对我来说是一种希腊语(它是如此根本不同!)。所以,虽然我已经找到了很多这个问题的答案,但是我无法理解其中任何一个,所以我无法弄清楚我应该在每个代码中自定义哪些代码我见过的例子,或者即使我看到的解决方案与我的问题相关。所以我有点希望找到一个非常具体的问题的简单解决方案,然后我可以自定义?非常感谢。 :)

我有以下XML文件(从SQL Server生成):

<BillingRates>
    <BillingRate BillingRateID="3" BillingRateName="Name1" ChargeTypeName="Service" DefaultBillingAmt="106.0000" UnitsDisplay="Hours" ChargeTypeID="1"/>
    <BillingRate BillingRateID="1" BillingRateName="Name2" ChargeTypeName="Service" DefaultBillingAmt="106.0000" UnitsDisplay="Hours" ChargeTypeID="1"/>
    <BillingRate BillingRateID="4" BillingRateName="Name3" ChargeTypeName="Service" DefaultBillingAmt="70.0000" UnitsDisplay="Hours" ChargeTypeID="1"/>
    ...
</BillingRates>

我想要做的是,当更改选择控件时,我想获得与用户选择的BillingRateID相对应的DefaultBillingAmount(在select控件中)。我们将调用select控件“cboBillingRateID”。

  • 表单位于(从根目录):Jobs / BillItemEdit.html
  • XML文件位于(从根目录):XML / BillingRates.xml

(它实际上是一个aspx文件,但重要的是表单不会完全重新加载,因此表单中输入的其他项目不会消失。所以没有Postbacks。如果你假装这是一个常规的html表单为了这个问题,我可以将它改编为aspx)。

再次感谢! :)

更新:感谢您的帮助,Andre Figueiredo - 我主要是让它正常工作。只有一个问题困扰着我。这是代码,主要基于你的代码(这是来自我的aspx代码,因此控件引用了&lt;%= controlname .ClientID%&gt;,但最终的结果是引用了正确的控件在结果HTML中:

$('#<%=cboBillingRateID.ClientID %>').change(getBillingRate);

function getBillingRate() {
    $.ajax({
        url: '../XML/BillingRates.xml',
        type: 'GET',
        dataType: 'xml',
        success: function (xml) {
            var id = $('#<%=cboBillingRateID.ClientID %>').val();
            var xmlDoc = $($.parseXML(xml));
            var billingRate = xmlDoc
                .find('BillingRate[BillingRateID="' + id + '"]')
                .attr('DefaultBillingAmt');
            alert("id = " + id + ", billingRate = " + billingRate.toString());
            $('#<%=BillingRate.ClientID %>').val(billingRate.toString());
        },
        error: function () {
            alert("An error occurred while processing XML file.");
        }
    }); 
}

唯一的问题是没有任何内容进入billingRate。当我选择“Name1”记录时,警报(我为调试目的而添加)表示“id = 1,billingRate = undefined”。 Chrome控制台中没有错误。我对可能造成这种情况的原因一无所知?

再次感谢。 :)

1 个答案:

答案 0 :(得分:1)

您可以使用JS库将XML解析为对象,即:

creationType

或者您可以使用jQuery.parseXML

var id = $('#cboBillingRateID').val();
var obj = somelib(xml);
var billingRate = obj.BillingRates.find(function(billingRate){
  return billingRate.BillingRateID == id;
})