Skip List of objects in XSLT argument list and access it in xsl in C #

I have a class that I use in XSL

public class PurchaseOrderDTO
{
    public IList<PurchaseOrderDetailsDTO> PurchaseOrderDetailsDTOList { get; set; }
    public String PONo { get; set; }
    public Decimal POValue { get; set; }
    public DateTime? PODate { get; set; }
}

The following is the use of xsl i   

<P>
  Dear,
</P>
Purchase Order No <xsl:value-of select="PurchaseOrderDTO:get_PONo()" /> has
being created <BR />
Purchase Order Value <xsl:value-of select="PurchaseOrderDTO:get_POValue()" /> <BR />
<BR />
Purchase Order Date <xsl:value-of select="PurchaseOrderDTO:get_PODate()" /> <BR />
<BR />

<xsl:for-each select="PurchaseOrderDTO:get_PurchaseOrderDetailsDTOList()">
  <ul>
    <li>
      <p>      
        Item name
      </p>
      <xsl:value-of select="PurchaseOrderDetailsDTO:get_Item()"></xsl:value-of>
    </li>
  </ul>
</xsl:for-each>

  private static PurchaseOrderDTO GetPurchaseOrderDTO()
    {
        PurchaseOrderDTO _PurchaseOrderDTO = new PurchaseOrderDTO();
        Random rand = new Random();

        _PurchaseOrderDTO.PODate = DateTime.Now;
        _PurchaseOrderDTO.PONo = "PO3333";
        _PurchaseOrderDTO.POValue = rand.Next(40200, 960000);

        IList<PurchaseOrderDetailsDTO> _PurchaseOrderDetailsDTOList = new List<PurchaseOrderDetailsDTO>();

        for (int i = 1; i < 3; i++)
        {
            PurchaseOrderDetailsDTO _PurchaseOrderDetailsDTO = new PurchaseOrderDetailsDTO();
            _PurchaseOrderDetailsDTO.ID = (Int16)i;
            _PurchaseOrderDetailsDTO.Item = "Item" + i;
            _PurchaseOrderDetailsDTO.Value = Convert.ToDecimal(rand.Next(100, 500) * i);
            _PurchaseOrderDetailsDTOList.Add(_PurchaseOrderDetailsDTO);
        }

        _PurchaseOrderDTO.PurchaseOrderDetailsDTOList = _PurchaseOrderDetailsDTOList;

        return _PurchaseOrderDTO;


    }

    private static void GetEmailTemplate()
    {
        PurchaseOrderDTO _PurchaseOrderDTO = GetPurchaseOrderDTO();

        XslTransform _XslTransform = new XslTransform();
        _XslTransform.Load("../../Transformer.xslt");

        XmlDocument _XmlDocument = new XmlDocument();
        _XmlDocument.AppendChild(_XmlDocument.CreateElement("Root"));

        XPathNavigator _XPathNavigator = _XmlDocument.CreateNavigator();

        XsltArgumentList _XsltArgumentList = new XsltArgumentList();


        Hashtable _Hashtable = new Hashtable();
        _Hashtable["PurchaseOrderDTO"] = _PurchaseOrderDTO;

        if (_Hashtable != null)
        {
            foreach (DictionaryEntry entry in _Hashtable)
            {
                _XsltArgumentList.AddExtensionObject(entry.Key.ToString(), entry.Value);
            }
        }

        StringBuilder _sb = new StringBuilder();
        XmlTextWriter _XmlTextWriter = new XmlTextWriter(new StringWriter(_sb));

        _XslTransform.Transform(_XPathNavigator, _XsltArgumentList, _XmlTextWriter);

        Console.WriteLine(_sb.ToString());



    }

But in ouput, I do not get the value of property properties. Can I access the values ​​of list items in an XsltArgumentList?

+5
source share
1 answer

I do not think so, I am afraid. When playing with your code, I get errors telling me that the returned types of List'1 are not supported (i.e. a collection of part objects)

Checking the documentation of XSLT extension objects tells me the following:

, XPath , , Boolean node set

, CLR , .

, -: CLR , , , T4. , : T4

0

All Articles