タグ: VB.net XML Xslt

Xsltを使用したXMLの変換

Sample[VB.net]

Function Main() as String
  Dim outputDoc as New XDocument
  Dim inputDoc as New XDocument

  inputDoc = XDocument.Load("[XmlFileのパス]")
  outputDoc = new XDocument()
  Dim xwrite as XmlWriter = outputDoc.CreateWriter()

  XslCompiledTransform xslt = new XslCompiledTransform()
  xslt.Load("[XsltFileのパス]")
  xslt.Transform(inputDoc.CreateReader(), xwrite)
  return outputDoc.ToString()
End Function

VB.netから引数を渡す

Sample[VB.net]

Function Main() as String
  Dim outputDoc as New XDocument
  Dim inputDoc as New XDocument

  inputDoc = XDocument.Load("[XmlFileのパス]")
  outputDoc = new XDocument()
  Dim xwrite as XmlWriter = outputDoc.CreateWriter()

  XslCompiledTransform xslt = new XslCompiledTransform()
  xslt.Load("[XsltFileのパス]")
  Dim argList as new XsltArgumentList()
  argList.AddParam("test1", "", "This is test")

  xslt.Transform(inputDoc.CreateReader(),argList, xwrite);
  
  return outputDoc.ToString()
End Function

ただ単純な変換に比べて変更した点は、"argList"という名前で引数リストのオブジェクトを作成し、変換に適用させただけです。

動的に引数を渡せるのは、Xsltの仕様で<xsl:param>のみです。xsl:paramの厄介なところはテンプレートごとに宣言する必要があるというところです。テンプレートが変わればパラメータ渡しの処理を追加しなければなりません。

階層が深くなった時等はそれだと逆に不便なので、xsl:param→xsl:variableといった処理をXslt側に追加してあげたほうが現実的でしょう。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:variable name="test1"></xsl:variable>
  <xsl:variable name="alias1" select="$test1"></xsl:variable>
</xsl:stylesheet>