سؤال

أنا أتساءل عما إذا كان هذا ممكنًا.

لدي HTML مثل ذلك:

<p>
  <font face="Georgia">
    <b>History</b><br>&nbsp; <br>Two of the polysaccharides used in the manufacture of...</font>
    <a title="PubMed" href="http://www.www.gov/pubmed/" target="_blank">
    <font face="Georgia">) and this web site for new development by...well as Self Affirmed Medical Food GRAS status.&nbsp; 
    </font>
</p>

<p>
  <font face="Georgia">[READMORE]</font>
</p>

<p><font face="Georgia"><br><strong>Proprietary Composition</strong><br>
   <br>The method in which soluble fibres are made into... REST OF ARTICLE...
</p>

نعم ، إنه HTML القبيح ويأتي من wysiwyg لذلك لدي القليل من السيطرة على ذلك.

ما أريد فعله هو البحث عن اقرأ أكثر في المستند ، قم بإزالة أي علامات الوالدين (في هذه الحالة ، <font> و ال <p> العلامات) واستبدلها برابط Readmore أثناء لف بقية المستند في عملاق `... بقية المقالة ...

أنا متأكد من أن HTMLAGILITYPACK ستحصل على جزء من الطريق إلى هناك ، لكنني أحاول فقط معرفة من أين أبدأ.

حتى الآن ، أنا متأكد من أنني يجب أن أستخدمه htmlDoc.DocumentNode.SelectSingleNode(//p[text()="[READMORE]"]) أو شيء ما. أنا لست على دراية بـ XPath.

بالنسبة لمستنداتي ، قد يكون أو لا يكون Readmore متداخلًا font بطاقة شعار.

أيضًا ، في بعض الحالات ، قد لا يكون في علامة على الإطلاق ، بل في جذر المستند. يمكنني فقط إجراء بحث منتظم واستبداله في هذه الحالة ويجب أن يكون واضحًا.

وضعي المثالي سيكون شيئًا من هذا القبيل (رمز كاذب)

var node = SelectNodeContaining("[READMORE]").

node.Replace( "link here" );

node.RestOfDocument().Wrap("<div class='wrapper'");

أعلم ، أنا أحلم ... ولكن آمل أن يكون هذا منطقيًا.

هل كانت مفيدة؟

المحلول

هنا حل XSLT:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="p[descendant::text()[. = '[READMORE]']]">
  <a href="#ReadmoreWrapper">READMORE</a>
  <div class="wrapper" id="#ReadmoreWrapper">
   <xsl:apply-templates select="following-sibling::node()" mode="copy"/>
  </div>
 </xsl:template>

 <xsl:template match=
  "node()[ancestor::p[descendant::text()[. = '[READMORE]']]
         or
          preceding::p[descendant::text()[. = '[READMORE]']]
          ]
  "/>

  <xsl:template match="node()|@*" mode="copy">
      <xsl:copy>
       <xsl:apply-templates select="node()|@*" mode="copy"/>
      </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

عندما يتم تطبيق هذا التحول على مستند XML التالي:

<html>
<p>
  <font face="Georgia">
    <b>History</b><br/>&#xA0; <br/>Two of the polysaccharides used in the manufacture of...</font>
    <a title="PubMed" href="http://www.www.gov/pubmed/" target="_blank"/>
    <font face="Georgia">) and this web site for new development by...well as Self Affirmed Medical Food GRAS status.&#xA0;
    </font>
</p>

<p>
  <font face="Georgia">[READMORE]</font>
</p>

<p><font face="Georgia"><br/><strong>Proprietary Composition</strong><br/>
   <br/>The method in which soluble fibres are made into... REST OF ARTICLE...
   </font>
</p>

</html>

يتم إنتاج النتيجة المطلوبة:

<html>
    <p>
        <font face="Georgia"><b>History</b><br/>  <br/>Two of the polysaccharides used in the manufacture of...</font>
        <a title="PubMed" href="http://www.www.gov/pubmed/" target="_blank"/>
        <font face="Georgia">) and this web site for new development by...well as Self Affirmed Medical Food GRAS status. 
    </font>
    </p>
    <a href="#ReadmoreWrapper">READMORE</a>
    <div class="wrapper" id="#ReadmoreWrapper">
        <p>
            <font face="Georgia"><br/><strong>Proprietary Composition</strong><br/><br/>The method in which soluble fibres are made into... REST OF ARTICLE...
   </font>
        </p>
    </div>
</html>

نصائح أخرى

إذا كنت على صواب ، يمكنك تجربة شيء واحد ... مثل نفس الشيء الذي نقوم به في إرسال بريد HTML مخصص

  1. قم بإنشاء قالب من صفحة HTML الخاصة بك مع محتويات ثابتة.
  2. معرفات إلحاق المحتويات الديناميكية كما ذكرت [ReadMore] أو {Readmore} أو شيء مشابه لذلك.
  3. اقرأ الآن سطر ملف HTML عبر القالب واستبدل المعرفات بالنص المطلوب.
  4. الآن احفظ السلسلة بأكملها إلى ملف HTML جديد أو افعل ما تريد.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top