كيفية استخدام ASP.NET أو Visual Basic.NET لتحويل XML إلى "تنسيق نص منسق" لبرنامج Microsoft Word 2002

ملخص

استخدم دليل خطوة بخطوة لإنشاء تنسيق Rich Text (RTF) من لغة التوصيف الموسعة (XML) باستخدام Visual Basic.NET.


هو تنسيق Rich Text تنسيق نصية بترميز النص المنسق وتخطيط المستند والرسومات. عادة ما يتم استخدامه بواسطة Microsoft Word. أنه RTF النص القائم، يمكن بسهولة إنشاؤه باستخدام التعليمات البرمجية. إذا كان لديك بيانات XML التي تريد عرضها في Word كقائمة الكتالوجات/أو نوع مستند لدمج المراسلات، ثم تحويل بيانات XML إلى دفق RTF قد يكون حل الأمثل لك. وفي الحقيقة، إذا كنت تقوم بتطوير حل حيث يمكنك إنشاء المستندات على خادم ويب، ثم إنشاء هذه المستندات باستخدام تنسيق نصي مثل HTML أو RTF، يفضل عبر استخدام الخادم أتمتة Word.

توفر هذه المقالة نموذج التعليمات البرمجية تحتوي على إرشادات خطوة بخطوة لتحويل XML إلى RTF للعرض في Word باستخدام العديد من الطرق:
  • حفظ ملف RTF وفتحه في Word.
  • تحويل RTF إلى Word باستخدام حافظة Windows.
  • دفق RTF إلى Word في Microsoft Internet Explorer من تطبيق ويب ASP.NET.

مواصفات تنسيق نص منسق

مواصفات تنسيق Rich Text (RTF) مواصفات عامة لإنشاء ملفات نصية متوافق مع RTF. يمكنك استخدام الوثائق لمواصفات كمورد في موقع شبكة مطوري Microsoft (MSDN) التالي على الويب لمساعدتك في إنشاء ملفات RTF. ومع ذلك، يتم توفير المواصفات "كهو"، وإلا يجري تقديم الدعم بالدعم الفني ل Microsoft للمواصفات. انقر فوق الارتباطات التالية لمواصفات RTF:

تحويل XML إلى RTF

يمكنك أن تأخذ XML صالح أيا كان مصدره وتحويلها إلى RTF. يوضح الإجراء التالي كيفية تحويل XML المخصصة إلى RTF أما حفظ ملف أو نسخة إلى "الحافظة".
  1. إنشاء جديد Visual Basic.NET تطبيقات Windows. يتم إنشاء Form1.
  2. إضافة عنصري تحكم زر إلى Form1.
  3. في القائمة عرض ، انقر فوق الرمز.
  4. في الجزء العلوي من إطار التعليمات البرمجية قبل تطبيق فئة Form1 يضاف ما يلي:
    Imports System.XmlImports System.Xml.Xsl
    Imports System.IO
  5. أضف التعليمات البرمجية التالية إلى تطبيق فئة Form1 (قبل End Class):
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load        Button1.Text = "To File"
    Button2.Text = "To Clipboard"

    End Sub

    Private Sub ButtonsClick(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles Button1.Click, Button2.Click

    Dim sPath As String = Directory.GetParent(Directory.GetCurrentDirectory()).ToString

    ' Open the XML file.
    Dim xmlDoc As New XmlDocument()
    xmlDoc.Load(sPath & "\Dictionary.xml")

    ' Open the XSL file.
    Dim xslDoc As New XslTransform()
    xslDoc.Load(sPath & "\Dictionary.xslt")

    Select Case sender.name
    Case "Button1"
    ' Transform the XSL and save it to file.
    Dim TWrtr As New XmlTextWriter(sPath & "\Dictionary.RTF", System.Text.Encoding.Default)
    xslDoc.Transform(xmlDoc, Nothing, TWrtr, Nothing)
    TWrtr.Close()
    MsgBox("Transformed RTF saved to " & sPath & "\Dictionary.RTF")
    Case "Button2"
    ' Transform the XSL and copy it to the clipboard.
    Dim SWrtr As New StringWriter()
    xslDoc.Transform(xmlDoc, Nothing, SWrtr, Nothing)
    Dim datObj As New DataObject(DataFormats.Rtf, SWrtr)
    Clipboard.SetDataObject(datObj)
    SWrtr.Close()
    MsgBox("Transformed RTF copied to the clipboard.")
    End Select

    End Sub
  6. إضافة ملف XML إلى المشروع الخاص بك:
    1. من القائمة مشروع ، انقر فوق إضافة عنصر جديد.
    2. من قائمة قوالب، انقر فوق ملف XML.
    3. اكتب اسم Dictionary.xml ومن ثم انقر فوق فتح.
    4. إلحاق محتويات Dictionary.xml ما يلي:
      <Dictionary>  <Entries>
      <Entry>
      <Word Type="1">Energetic</Word>
      <Definition>Having, exerting, or displaying energy</Definition>
      </Entry>
      <Entry>
      <Word Type="1">Happy</Word>
      <Definition>Enjoying, displaying, or characterized by pleasure or joy</Definition>
      </Entry>
      <Entry>
      <Word Type="2">Emotion</Word>
      <Definition>A complex, strong subjective response</Definition>
      </Entry>
      </Entries>
      </Dictionary>
  7. إضافة ملف XSLT إلى المشروع الخاص بك:
    1. من القائمة مشروع ، انقر فوق إضافة عنصر جديد.
    2. من قائمة قوالب، انقر فوق ملف XSLT.
    3. اكتب اسم Dictionary.xslt ومن ثم انقر فوق فتح.
    4. استبدال محتويات Dictionary.xslt بما يلي:
       <?xml version="1.0" encoding="UTF-8" ?>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

      <xsl:output method="text"/>
      <xsl:template match="/">

      <xsl:text>{\rtf1</xsl:text>

      <xsl:for-each select="Dictionary/Entries/Entry">

      <xsl:text>\par\b </xsl:text>
      <xsl:value-of select="Word"/>
      <xsl:text>\b0\i </xsl:text>
      <xsl:if test="Word[@Type='1']">adj.</xsl:if>
      <xsl:if test="Word[@Type='2']">n.</xsl:if>
      <xsl:text>\i0\par </xsl:text>
      <xsl:value-of select="Definition"/>
      <xsl:text>\par</xsl:text>
      </xsl:for-each>

      <xsl:text>}</xsl:text>

      </xsl:template>

      </xsl:stylesheet>
  8. اضغط F5 لإنشاء البرنامج وتشغيله.
  9. انقر فوق الملف حفظ XML تم تحويلها إلى ملف (Dictionary.rtf). يمكنك فتح ملف RTF في Word لفحص نتائج التحويل.
  10. انقر فوق إلى الحافظة نسخ XML تم تحويلها إلى حافظة Windows. ثم يمكنك لصق محتويات الحافظة إلى مستند Word جديد أو موجود لمشاهدة النتائج.

تحويل DataSet إلى RTF

Visual Basic.NET يسمح لك بالقيام بتحويلات على مجموعات البيانات بسهولة. يوضح هذا الإجراء كيفية الحصول على البيانات ذات الصلة من قاعدة بيانات نموذج Northwind وتحويلها إلى RTF. موضحين جهازي تحويلات مختلفة: مستند RTF بسيط يسرد معلومات جهة اتصال العميل ومستند RTF إلى حد ما أكثر تعقيداً يعرض معلومات الأمر للعملاء في شكل نوع دمج البريد.
  1. بدء تشغيل Visual Basic جديدة تطبيقات ويب ASP.NET وحفظه إلى http://localhost/RTFDemo.

    يتم إنشاء WebForm1 .
  2. إضافة عنصري تحكم زر إلى WebForm1.
  3. في القائمة عرض ، انقر فوق الرمز.
  4. أضف التعليمات البرمجية التالية إلى الدالة Page_Load :
            Button1.Text = "View Contact Information"        Button2.Text = "View Customer Orders"
  5. إضافة دالة التالية إلى الفئة WebForm1 .

    ملاحظة: يفترض التعليمات البرمجية التالية لديك SQL Server مثبتاً على localhost. إذا كان يجب عليك استخدام كمبيوتر آخر، تبعاً لذلك تغيير عضو "مصدر البيانات" في سلسلة الاتصال.
        Private Sub ButtonsClick(ByVal sender As System.Object, ByVal e As System.EventArgs) _            Handles Button1.Click, Button2.Click

    ' Connect to the data source.
    Dim nwindConn As SqlConnection = New SqlConnection( _
    "Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI")
    nwindConn.Open()

    ' Build a dataset based on whether you requested to view a list of
    ' orders or a list of contacts.
    Dim ds As DataSet
    Dim sXSL As String
    Select Case (sender.id)

    Case "Button1"

    ds = New DataSet("Contacts")
    Dim ContactsDA As SqlDataAdapter = New SqlDataAdapter("SELECT * FROM Customers", nwindConn)
    ContactsDA.Fill(ds, "Customers")
    ' XSLT to use for transforming this dataset.
    sXSL = "Contacts.xslt"

    Case "Button2"

    ds = New DataSet("CustomerOrders")

    Dim custDA As SqlDataAdapter = New SqlDataAdapter("SELECT CustomerID, CompanyName, " & _
    "Address, City, Region, PostalCode, Country FROM Customers", nwindConn)
    custDA.Fill(ds, "Customers")

    Dim ordersDA As SqlDataAdapter = New SqlDataAdapter("SELECT OrderID, CustomerID, Freight " & _
    "FROM Orders", nwindConn)
    ordersDA.Fill(ds, "Orders")

    Dim ordersdetailDA As SqlDataAdapter = New SqlDataAdapter( _
    "SELECT [Order Details].OrderID, Products.ProductName, [Order Details].Quantity, " & _
    "[Order Details].[UnitPrice]*[Quantity]*(1-[Discount]) AS ItemTotal " & _
    "FROM Products INNER JOIN [Order Details] ON Products.ProductID = [Order Details].ProductID " _
    , nwindConn)

    ordersdetailDA.Fill(ds, "OrderDetails")

    nwindConn.Close()

    ds.Relations.Add("CustOrders", _
    ds.Tables("Customers").Columns("CustomerID"), _
    ds.Tables("Orders").Columns("CustomerID")).Nested = True

    ds.Relations.Add("OrdersToOrdersDetail", _
    ds.Tables("Orders").Columns("OrderID"), _
    ds.Tables("OrderDetails").Columns("OrderID")).Nested = True

    ' XSLT to use for transforming this dataset.
    sXSL = "CustOrders.xslt"

    End Select

    ' Close the connection to the data source.
    nwindConn.Close()

    ' Transform the dataset by using the appropriate stylesheet.
    Dim xmlDoc As XmlDataDocument = New XmlDataDocument(ds)
    Dim xslTran As XslTransform = New XslTransform()
    xslTran.Load(Server.MapPath(sXSL))

    ' Stream the results of the transformation to Word.
    Response.ContentType = "application/msword"
    Response.Charset = ""
    Response.ContentEncoding = System.Text.Encoding.Default
    xslTran.Transform(xmlDoc, Nothing, Response.Output)

    End Sub
  6. إضافة سطور التعليمات البرمجية التالية في الجزء العلوي من WebForm1.aspx.vb، قبل تطبيق الفئة WebForm1:
    Imports System.Data.SqlClientImports System.Xml
    Imports System.Xml.Xsl
  7. من القائمة مشروع ، انقر فوق إضافة عنصر جديد. من قائمة القوالب، انقر فوق ملف XSLT، قم بتسمية الملف Contacts.xslt، ومن ثم انقر فوق فتح.
  8. استبدال محتويات Contacts.xslt بما يلي:
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="urn:my-scripts" >   

    <xsl:output method="text"/>

    <xsl:template match="/">

    <xsl:text>{\rtf1</xsl:text>

    <xsl:text>{\fonttbl{\f0\froman\fcharset0\fprq2 Times New Roman;}{\f1\fswiss\fcharset0\fprq2 Arial;
    }}</xsl:text>
    <xsl:text>{\header\pard\fs50 My Customer Contacts}</xsl:text>

    <xsl:text>{\footer\pard\fs18 Page {\field{\*\fldinst PAGE}</xsl:text>
    <xsl:text>{\fldrslt
    }} of {\field{\*\fldinst NUMPAGES}{\fldrslt 1}} \par}</xsl:text>
    <xsl:text>\f1\fs20</xsl:text>

    <xsl:for-each select="Contacts/Customers">
    <xsl:text>\par\b </xsl:text><xsl:value-of select="CustomerID"/><xsl:text>\b0</xsl:text>
    <xsl:text>\par </xsl:text><xsl:value-of select="CompanyName"/>
    <xsl:text>\par </xsl:text><xsl:value-of select="ContactName"/>
    <xsl:text>\par </xsl:text><xsl:value-of select="Phone"/>
    <xsl:text>\par</xsl:text>
    </xsl:for-each>

    <xsl:text>}</xsl:text>

    </xsl:template>

    <xsl:template match="Customers">

    <xsl:text>\par\b </xsl:text><xsl:value-of select="CustomerID"/><xsl:text>\b0</xsl:text>
    <xsl:text>\par </xsl:text><xsl:value-of select="CompanyName"/>
    <xsl:text>\par </xsl:text><xsl:value-of select="ContactName"/>
    <xsl:text>\par </xsl:text><xsl:value-of select="Phone"/>
    <xsl:text>\par</xsl:text>

    </xsl:template>

    </xsl:stylesheet>
  9. من القائمة مشروع ، انقر فوق إضافة عنصر جديد. من قائمة القوالب، انقر فوق ملف XSLT، قم بتسمية الملف CustOrders.xslt، ومن ثم انقر فوق فتح.
  10. استبدال محتويات CustOrders.xslt بما يلي:
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="urn:my-scripts" >   

    <xsl:output method="text"/>

    <msxsl:script language="VB" implements-prefix="user">
    Dim CustomerTotal as Double = 0
    Dim OrderSubtotal as Double = 0

    Function AddToOrderSubtotal(amt)
    amt.MoveNext
    OrderSubtotal = OrderSubtotal + System.Convert.ToDouble(amt.Current.Value)
    End Function

    Function GetOrderSubtotal
    GetOrderSubtotal = OrderSubtotal
    End Function

    Function GetCustomerTotal
    GetCustomerTotal = CustomerTotal
    CustomerTotal = 0
    End Function

    Function GetOrderTotal(freight)
    freight.MoveNext
    nFreight = System.Convert.ToDouble(freight.Current.Value)
    GetOrderTotal = nFreight + OrderSubtotal
    CustomerTotal = nFreight + OrderSubtotal + CustomerTotal
    OrderSubtotal = 0
    End Function

    </msxsl:script>

    <xsl:template match="CustomerOrders">

    <xsl:text>{\rtf1</xsl:text>

    <xsl:text>{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;
    \red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
    \red255\green255\blue255;\red221\green221\blue221;}</xsl:text>

    <xsl:text>{\info{\title Sample RTF Document}{\author Microsoft Developer Support
    }}</xsl:text>
    <xsl:text>{\header\pard\qc{\fs50 ASP-Generated RTF\par}{\fs18\chdate\par}\par\par}</xsl:text>

    <xsl:text>{\footer\pard\qc\brdrt\brdrs\brdrw10\brsp100\fs18 Page {\field{\*\fldinst PAGE}</xsl:text>
    <xsl:text>{\fldrslt
    }} of {\field{\*\fldinst NUMPAGES}{\fldrslt 1}} \par}</xsl:text>
    <xsl:apply-templates select="Customers"/>

    <xsl:text>}</xsl:text>

    </xsl:template>

    <xsl:template match="Customers">

    <xsl:text>\par\pard\fs20\cf2\qr\b </xsl:text><xsl:value-of select="CustomerID"/><xsl:text>\cf0\b0</xsl:text>
    <xsl:text>\par\pard </xsl:text><xsl:value-of select="CompanyName"/>
    <xsl:text>\par </xsl:text><xsl:value-of select="Address"/>
    <xsl:text>\par </xsl:text><xsl:value-of select="City"/>
    <xsl:text>, </xsl:text><xsl:value-of select="Region"/>
    <xsl:text> </xsl:text><xsl:value-of select="PostalCode"/>
    <xsl:text>\par </xsl:text><xsl:value-of select="Country"/>
    <xsl:text>\par\par</xsl:text>

    <xsl:apply-templates select="Orders"/>

    <xsl:text>\trowd\cellx7000\cellx9000\pard\intbl\ql\b\cbpat1 </xsl:text>
    <xsl:text>Order Total for the Current Period:\cell </xsl:text>
    <xsl:text>\qr</xsl:text>
    <xsl:variable name="CustTtl" select="user:GetCustomerTotal()"/>
    <xsl:value-of select="format-number($CustTtl,'$###0.00')"/>
    <xsl:text>\cell</xsl:text>
    <xsl:text>\pard\intbl\row</xsl:text>

    <xsl:text>\pard\par\pard</xsl:text>
    <xsl:text>\pard\plain\fs18\cf6\qc</xsl:text>
    <xsl:choose>
    <xsl:when test="$CustTtl = 0">
    <xsl:text>\b We've missed hearing from you!\b0 </xsl:text>
    <xsl:text> At your convenience, please call your personal sales representative </xsl:text>
    <xsl:text>so that we may discuss our specials for new and returning customers!</xsl:text>
    </xsl:when>
    <xsl:when test="$CustTtl > 2000">
    <xsl:text>\b Congratulations!\b0 Your purchases for this period qualify you for a \b 20%\b0 </xsl:text>
    <xsl:text> discount on one of your next orders. To take advantage of this offer, provide </xsl:text>
    <xsl:text>the coupon code ABC123XYZ when placing your order.</xsl:text>
    </xsl:when>
    <xsl:otherwise>
    <xsl:text> We value your patronage with Northwind Traders and would love to hear from you. </xsl:text>
    <xsl:text>If you have any questions about our upcoming line of products or if you want </xsl:text>
    <xsl:text>a catalog for the coming season, call 1-888-000-000.</xsl:text>
    </xsl:otherwise>
    </xsl:choose>
    <xsl:text>\par\pard</xsl:text>
    <xsl:text>\par \page</xsl:text>

    </xsl:template>

    <xsl:template match="Orders">

    <xsl:text>\trowd\cellx9000\pard\intbl\cbpat9</xsl:text>
    <xsl:text>\ql\b </xsl:text><xsl:value-of select="OrderID"/><xsl:text>\b0\cell </xsl:text>
    <xsl:text>\pard\intbl\row</xsl:text>

    <xsl:apply-templates select="OrderDetails"/>

    <xsl:text>\trowd\cellx7000\cellx9000\pard\intbl</xsl:text>
    <xsl:text>\qr Subtotal:\cell </xsl:text>
    <xsl:value-of select="format-number(user:GetOrderSubtotal(),'$###0.00')"/><xsl:text>\cell</xsl:text>
    <xsl:text>\pard\intbl\row</xsl:text>

    <xsl:text>\trowd\cellx7000\cellx9000\pard\intbl</xsl:text>
    <xsl:text>\qr Freight:\cell </xsl:text>
    <xsl:value-of select="format-number(Freight,'$###0.00')"/><xsl:text>\cell</xsl:text>
    <xsl:text>\pard\intbl\row</xsl:text>

    <xsl:text>\trowd\cellx7000\cellx9000\pard\intbl</xsl:text>
    <xsl:text>\qr Total:\cell </xsl:text>
    <xsl:value-of select="format-number(user:GetOrderTotal(Freight), '$###0.00')"/><xsl:text>\cell</xsl:text>
    <xsl:text>\pard\intbl\row</xsl:text>

    <xsl:text>\trowd\cellx9000\pard\intbl \cell\pard\intbl\row</xsl:text>

    </xsl:template>

    <xsl:template match="OrderDetails">

    <xsl:text>\trowd\cellx5000\cellx7000\cellx9000\pard\intbl\ql </xsl:text>
    <xsl:value-of select="ProductName"/><xsl:text>\cell </xsl:text>
    <xsl:text>\qc </xsl:text><xsl:value-of select="Quantity"/><xsl:text>\cell </xsl:text>
    <xsl:text>\qr </xsl:text>
    <xsl:value-of select="format-number(ItemTotal,'$###0.00')"/><xsl:text>\cell</xsl:text>
    <xsl:variable name="RunTotal" select="user:AddToOrderSubtotal(ItemTotal)"/>
    <xsl:text>\pard\intbl\row</xsl:text>

    </xsl:template>

    </xsl:stylesheet>
  11. في بنية القائمة، انقر فوق إنشاء حلول.
  12. بدء تشغيل Internet Explorer، واستعرض للوصول إلى http://localhost/RTFDemo/Webform1.aspx.
  13. انقر فوق عرض معلومات جهة الاتصال لعرض أول تحويل XML إلى RTF في Word.
  14. انقر فوق الخلف في Internet Explorer.
  15. انقر فوق عرض أوامر العميل لعرض تحويل XML الثاني إلى RTF في Word.

RTF تلميحات استكشاف الأخطاء وإصلاحها

  • كما هو مكتوب، نموذج التعليمة البرمجية في
    مقطع تحويل DataSet إلى RTF، التدفقات RTF مباشرة إلى المستعرض. بدلاً من ذلك، يمكنك حفظ ملف RTF وإعادة توجيه إلى الملف المحفوظ. للقيام بذلك، استبدال هذه الأسطر من التعليمات البرمجية في النموذج
    Response.ContentType = "application/msword"Response.ContentEncoding = System.Text.Encoding.Default
    Response.Charset = ""
    xslTran.Transform(xmlDoc, Nothing, Response.Output)
    بواسطة:
    Dim writer As XmlTextWriter = New XmlTextWriter( _        Server.MapPath("Results.doc"), System.Text.Encoding.Default)
    xslTran.Transform(xmlDoc, Nothing, writer)
    writer.Close()
    Response.Redirect("Results.doc")
    تخزين RTF إلى ملف بهذه الطريقة يسمح لك بفحص بنية RTF في الملف بسهولة باستخدام أي نص محرر، مثل "المفكرة". تخزين ملف RTF يمكن تقنية استكشاف الأخطاء وإصلاحها مفيدة إذا كان تحويل XSL لا تنتج النتائج التي تتوقعها.
  • عند تحويل إلى RTF، تكون على علم بكيفية تقدم مسافة بيضاء وإرجاع سطر في ورقة الأنماط الخاصة بك لأن التي تؤثر على كيف يفسر Word الخاص بك RTF. كلا نماذج التعليمات البرمجية في هذه المقالة باستخدام عنصر < xsl:text > ذلك لأنها تفرض أي معلومات المسافة البيضاء الاحتفاظ بها.
  • استخدام < أسلوب xsl:output = "نص" > في ورقة الأنماط الخاصة بك للتأكد من أن يتم تحويله XML للنص (بدلاً من XML، وهو أسلوب الإخراج الافتراضي). إذا لم تحدد نص كأسلوب الإخراج، قد إضافة إرشادات معالجة XML للملف. وهذا منع Word من إينتيربيتينج بشكل صحيح النص ك RTF.

المراجع

للحصول على معلومات إضافية حول تطبيقات Office الأخرى ومستندة إلى خادم التنفيذ التلقائي من Microsoft Word، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
معلومات 257757 : اعتبارات جانب الخادم التشغيل الآلي للمكاتب
للحصول على معلومات إضافية حول استخدام RTF في الحلول الخاصة بك، انقر فوق أرقام المقالات التالية لعرضها في "قاعدة المعارف ل Microsoft":
270906 HOWTO: استخدام ASP لإنشاء مستند بتنسيق (RTF) نص منسق إلى دفق إلى Microsoft Word
258513 HOWTO: لصق نص منسق تنسيق السلسلة في Word باستخدام التنفيذ التلقائي Visual Basic
لمزيد من المعلومات حول تحويل XML باستخدام Visual Basic.NET، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
300934 كيفية: تطبيق تحويل XSL XML للتدفق باستخدام Visual Basic.NET
300929 كيفية: تطبيق تحويل XSL من مستند XML لمستند XML باستخدام Visual Basic.NET
خصائص

رقم الموضوع: 311461 - آخر مراجعة: 18‏/01‏/2017 - المراجعة: 1

تعليقات