Question

Je me demande si cela est possible.

Je html comme ceci:

<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>

Oui, il est html laid et il vient d'un WYSIWYG donc j'ai peu le contrôle.

Ce que je veux faire est de rechercher [READMORE] dans le document, supprimez toutes les balises parent (dans ce cas, les <font> et les balises <p>) et les remplacer par un lien de readmore tout emballage le reste du document dans un géant `... suite de l'article ...

Je suis assez sûr que la HtmlAgilityPack va me faire une partie du chemin, mais je suis juste essayer de savoir où commencer.

Jusqu'à présent, je suis sûr que je dois utiliser htmlDoc.DocumentNode.SelectSingleNode(//p[text()="[READMORE]"]) ou quelque chose. Je ne suis pas trop familier avec XPath.

Pour mes documents, le readmore peut ou peut ne pas être dans une balise font imbriquée.

En outre, dans certains cas, il peut ne pas être dans une étiquette du tout, mais plutôt à la racine du document. Je peux juste faire une recherche régulière et remplacer dans ce cas et il devrait être simple.

Ma situation idéale serait quelque chose comme ça (pseudo-code)

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

node.Replace( "link here" );

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

Je sais, je rêve ... mais j'espère que cela fait sens.

Était-ce utile?

La solution

Voici une solution 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>

lorsque cette transformation est appliquée sur le document XML suivant :

<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>

le résultat recherché est produit :

<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>

Autres conseils

Si je suis tout de suite, vous pouvez essayer une chose ... que la même chose que nous faisons dans l'envoi de mails HTML personnalisés

  1. Créer un modèle de votre page html avec des contenus statiques.
  2. identifiants Append pour contenu dynamique que vous avez dit [ReadMore] ou {} READMORE ou quelque chose de semblable.
  3. Maintenant, lisez la ligne de fichier html modèle en ligne et remplacer les identifiants avec le texte souhaité.
  4. Maintenant, sauvegardez l'intégralité de la chaîne dans un nouveau fichier html ou faire ce que vous voulez.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top