【问题标题】:XslCompiledTransform with objects and XSLT带有对象和 XSLT 的 XslCompiledTransform
【发布时间】:2011-07-13 10:56:06
【问题描述】:

我已向一个类添加了一些属性和局部变量,并希望使用 XSLT 将对象解析为 XML/HTML 文件。

现在奇怪的是: 当我有这个时:

private double _invoicePrice = 0;

[XmlAttribute("invoicePrice")]
public double InvoicePrice{
    get { return _invoicePrice; }
    set { _invoicePrice = value; }
}

[XmlAttribute("vat")]
public double Vat
{
    get
    {
        return 4;

        /* // also tried this...
        double shopVat = 19;
        double vat = (_invoicePrice / (shopVat + 100)) * shopVat;
        return Math.Round(vat, 2);
        */
    }
}

解析工作

当我有这个时:

private double _invoicePrice = 0;
private double _vat = 0;

[XmlAttribute("invoicePrice")]
public double InvoicePrice{
    get { return _invoicePrice; }
    set { _invoicePrice = value; }
}

[XmlAttribute("vat")]
public double Vat
{
    get { return _vat; }
    set { _vat = value; }
}

转换有效

属性Vat 在调试时总是有值!两种选择。但不知何故 XslCompiledTransform 需要私有变量或没有只读或什么?

有人可以解释为什么选项 2 有效而第一个无效..?

【问题讨论】:

    标签: asp.net object xslt xslcompiledtransform


    【解决方案1】:

    简单的答案是你需要一个二传手。

    编辑 2:setter 的原因

    Does XML Serialization Require Properties to be Read/Write?

    http://msdn.microsoft.com/en-us/library/182eeyhh%28VS.85%29.aspx

    结束编辑 2

    如果你现在尝试:

    private double _invoicePrice = 0;
    
    [XmlAttribute("invoicePrice")]
    public double InvoicePrice{
        get { return _invoicePrice; }
        set { _invoicePrice = value; }
    }
    
    [XmlAttribute("vat")]
    public double Vat
    {
        get
        {
            double shopVat = 19;
            double vat = (_invoicePrice / (shopVat + 100)) * shopVat;
            return Math.Round(vat, 2);
        }
        set
        {
        }
    }
    

    setter 是我真正改变的唯一一点。

    您不需要将值设置为任何值,但它确实允许 get 运行并返回您的增值税值。

    编辑
    一个建议可能是允许集合传入shopVAT 以在GET 中使用。众所周知,这可能会改变

    private double _invoicePrice = 0;
    private double _shopVat = 0;
    
    [XmlAttribute("invoicePrice")]
    public double InvoicePrice{
        get { return _invoicePrice; }
        set { _invoicePrice = value; }
    }
    
    [XmlAttribute("vat")]
    public double Vat
    {
        get
        {
            //double shopVat = 19;
            double vat = (_invoicePrice / (_shopVat + 100)) * _shopVat;
            return Math.Round(vat, 2);
        }
        set
        {
            _shopVat = value;
        }
    }
    

    【讨论】:

    猜你喜欢
    • 2011-09-07
    • 1970-01-01
    • 2018-05-01
    • 2010-11-03
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    相关资源
    最近更新 更多