【问题标题】:Knockout to keep XML node capitalization淘汰赛以保持 XML 节点大写
【发布时间】:2015-05-05 16:42:09
【问题描述】:

我目前正在使用Knockout 创建一些由第三方工具在旅途中使用的 XML。

比较直接,

var queryString = "";
var query = [
    '<Values data-bind="foreach: items, attr: {\'data-bind\': false}">',
        '<Value data-bind="text: $data, attr: {\'data-bind\': false}"></Value>',
    '</Values>'
];
var queryTemplate = query.join("");
var tmpDiv = document.createElement("div");
tmpDiv.innerHTML = queryTemplate;
ko.applyBindings({
    field: field,
    items: items
}, tmpDiv);
queryString = tmpDiv.innerHTML;

然而,令我非常沮丧的是,输出节点都是小写的:

<values>
    <value>1778</value>
</values>

在一般的网络工作中,上述问题不是问题,但是第三方工具对大小写敏感,因此按照最初指定的格式对节点进行格式化至关重要:

<Values>
    <Value>1778</Value>
</Values>

我错过了 Knockout 手册中的内容吗?有没有简单的解决方法?

【问题讨论】:

  • 这是一个 jquery 问题,不是淘汰赛:见stackoverflow.com/questions/11719384/…
  • @dperry 我没有使用 jQuery,但感谢您的输入。
  • 啊,是的,当然。不过似乎仍然是 html 与 xml 的问题。
  • @dperry 非常感谢,您的 cmets 帮助我走上了正轨。 如果使用jQuery,可以简单地var tmpDiv = $.parseXML(queryTemplate); 然后绑定到tmpDiv.documentElement。我会尽快把它变成香草 Js。如果你想自己做,我很乐意回答你的作为答案。

标签: javascript xml knockout.js


【解决方案1】:

正如dperry 在问题 cmets 中所指出的,这确实是一个 HTML 与 XML 的问题。使用jQuery's parseXML() 并绑定到 结果元素有助于轻松解决问题:

var tmpDiv = $.parseXML(queryTemplate);

然后简单地绑定到tmpDiv.documentElement 并改用它的innerHTML

如果您不使用 jQuery,您可以解决简单地使用上述功能的实现,可能已过时,适用原始许可:

// Cross-browser xml parsing
parseXML: function( data ) {
    var xml, tmp;
    if ( !data || typeof data !== "string" ) {
        return null;
    }
    try {
        if ( window.DOMParser ) { // Standard
            tmp = new DOMParser();
            xml = tmp.parseFromString( data , "text/xml" );
        } else { // IE
            xml = new ActiveXObject( "Microsoft.XMLDOM" );
            xml.async = "false";
            xml.loadXML( data );
        }
    } catch( e ) {
        xml = undefined;
    }
    if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
        jQuery.error( "Invalid XML: " + data );
    }
    return xml;
}

【讨论】:

    猜你喜欢
    • 2012-10-08
    • 1970-01-01
    • 2014-07-26
    • 2015-02-24
    • 2013-04-10
    • 2013-02-25
    • 2015-07-18
    • 2016-01-12
    • 1970-01-01
    相关资源
    最近更新 更多