小编Wic*_*edW的帖子

c#安全地截断HTML文章摘要

有没有人有这个变种?

这是我可以采取一些HTML并显示它而不打破作为文章的摘要引导?

截断包含HTML的文本,忽略标记

让我免于重新发明轮子!

编辑

对不起,新来的,你的权利,应该更好地表达这个问题,还有更多的信息

我希望获取一个html字符串并将其截断为一定数量的单词(甚至是char长度),这样我就可以将它的开头显示为摘要(然后导致主要文章).我希望保留html,以便我可以在预览中显示链接等.

我必须解决的主要问题是,如果我们在一个或多个标签的中间截断,我们最终可能会得到未封闭的html标签!

我有解决方案的想法是

  1. 首先将html截断为N个单词(单词更好但chars ok)(确保不要停留在标记的中间并截断require属性)

  2. 通过这个截断的字符串中打开的html标签工作(也许我会把它们粘在堆栈上?)

  3. 然后处理结束标记并确保它们与我在弹出它们时的堆栈匹配?

  4. 如果在此之后有任何打开的标签留在堆栈上,那么将它们写入截断的字符串的末尾,html应该是好的去!

编辑12/11/2009

  • 这就是我在VS2008中的单元测试文件中偶然发现的,这可能会帮助将来的某个人
  • 基于Jan代码的hack尝试在char版本+ word版本的顶部(免责声明:这是我的粗糙代码!)
  • 我假设在所有情况下使用'格式良好'的HTML(但不一定是根据XML版本具有根节点的完整文档)
  • Abels XML版本处于底层,但尚未完全获得在此上运行的测试(还需要了解代码)...
  • 当我有机会改进时,我会更新
  • 发布代码有问题吗?堆栈上没有上传工具吗?

感谢所有评论:)

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Xml;
using System.Xml.XPath;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace PINET40TestProject
{
    [TestClass]
    public class UtilityUnitTest
    {
        public static string TruncateHTMLSafeishChar(string text, int charCount)
        {
            bool inTag = false;
            int cntr = 0;
            int cntrContent = 0;

            // loop through html, counting only viewable content
            foreach (Char c in text)
            {
                if (cntrContent …
Run Code Online (Sandbox Code Playgroud)

html c# regex

13
推荐指数
1
解决办法
8541
查看次数

如何从bbv.Common.StateMachine(现在的Appccelerate.StateMachine)类中获取当前状态?

bbv.Common.StateMachineclass是我见过的最好的状态机代码.但它缺少一件事:获得当前状态.

这是一个订单跟踪系统:

fsm = new ActiveStateMachine<States, Events>();

        fsm.In(States.OrderCreated)
            .On(Events.Submitted)
            .Goto(States.WaitingForApproval);
        fsm.In(States.WaitingForApproval)
            .On(Events.Reject)
            .Goto(States.Rejected);
        fsm.In(States.WaitingForApproval)
            .On(Events.Approve)
            .Goto(States.BeingProcessed);
        fsm.In(States.BeingProcessed)
            .On(Events.ProcessFinished)
            .Goto(States.SentByMail);
        fsm.In(States.SentByMail)
            .On(Events.Deliver)
            .Goto(States.Delivered);

        fsm.Initialize(States.OrderCreated);
        fsm.Start();
        fsm.Fire(Events.Submitted);
        // Save this state to database
Run Code Online (Sandbox Code Playgroud)

你可以很容易地看到它的工作原理.

但我想在数据库中保存订单状态.所以我将能够显示订单的状态.

我需要一个

fsm.GetCurrentState()
//show this state in the a table
Run Code Online (Sandbox Code Playgroud)

方法.实际上有一种方法:我可以ExecuteOnEntry在每个州的条目上使用和更改本地值.但ExecuteOnEntry为每个州写作都会很麻烦,因为我会重复自己!

必须有一种微妙的方式来做到这一点.

c# state-machine

10
推荐指数
2
解决办法
2482
查看次数

Xamarin在XAML中表示TableView

任何人都可以告诉我如何在XAML中设置TableView.试过 -

<?xml version="1.0" encoding="UTF-8" ?>
<ContentPage
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    x:Class="XYZ.Forms.HardCodedCells">
    <ContentPage.Content>
    <StackLayout>
    <Label Text="Above TableView"></Label>
    <TableView>
        <TableRoot>
            <TableSection Title="Test">     
                <TextCell Text="Test"></TextCell>
            </TableSection>
        </TableRoot>
    </TableView>
    </StackLayout>
    </ContentPage.Content>
</ContentPage>
Run Code Online (Sandbox Code Playgroud)

这个"尝试"在屏幕上呈现空白?

如果我向TableSection添加额外的单元格,比如说EntryCell,我得到 -

"对象类型Xamarin.Forms.TextCell无法转换为目标类型:Xamarin.Forms.View"

顺便说一下,在哪里可以看到每个Forms元素的有效XAML语法?

xamarin.forms

9
推荐指数
1
解决办法
2万
查看次数

Xamarin.Forms将一个GestureRecognizer添加到ListView中的图像

我正在尝试向ListView中的图像添加点按手势

下面的图像在没有Image.GestureRecognizers部分的ListView中正确呈现,但是使用它,ListView根本不呈现任何内容(没有错误消息). 为了澄清这一点,ListView中还有一个Label,它也不会呈现.

<Image x:Name="newsImage" VerticalOptions="End" HeightRequest="200" WidthRequest="200" Aspect="AspectFill" Source="{Binding Imageurllarge}">
                        <Image.GestureRecognizers>
                            <TapGestureRecognizer 
                                Tapped="OnTapGestureRecognizerTapped" 
                                NumberOfTapsRequired="1" />
                        </Image.GestureRecognizers>
                    </Image>
Run Code Online (Sandbox Code Playgroud)

我从http://developer.xamarin.com/guides/cross-platform/xamarin-forms/working-with/gestures/获取此信息(假设此示例不是列表视图图像,但假设它应该在列表视图中工作) .

另外(根据评论建议)

<Image.GestureRecognizers>
    <TapGestureRecognizer 
      Command="{Binding TapCommand}" 
      CommandParameter="newsImage" />
Run Code Online (Sandbox Code Playgroud)

似乎没有更好的公平.

如果有人有一个如何在后面的代码中添加这个的例子(没有视图模型很好)那么这样做.

xamarin xamarin.forms

9
推荐指数
1
解决办法
2万
查看次数

Xamarin.Forms UserControl使用XAML和自定义渲染器

已经有一些关于如何创建"自定义控件"的好例子 -

我想创建一个"复合自定义控件或用户控件 ",它包含在XAML中定义的多个元素(在共享代码中),然后使用渲染器进行自定义(比如调整每个平台的样式).

有没有人有这样做的例子呢?具有可绑定标签和输入框的视图的简单示例应足以显示主要原则.

这是我到目前为止 -

定义了一个ContentView来表示我们的用户控件布局和内容.

<ContentView xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="News.Forms.VisualNewsContentView">
    <ContentView.Content>
        <StackLayout>
            <Label x:Name="MyLabel" Text="Label"></Label>
            <Entry x:Name="MyEntry" Text="Entry"></Entry>
        </StackLayout>
    </ContentView.Content>
</ContentView>
Run Code Online (Sandbox Code Playgroud)

代码隐藏 -

public partial class VisualNewsContentView : ContentView
{
    public VisualNewsContentView ()
    {
        InitializeComponent ();
    }

    // Not sure if I need this to access Entry ...
    public Entry GetEntry ()
    {
        return MyEntry;
    }
}
Run Code Online (Sandbox Code Playgroud)

为该ContentView添加Android自定义渲染器,如何访问和自定义ContentView的原生部件/控件?

[assembly:ExportRenderer (typeof(VisualNewsContentView), typeof(VisualNewsRenderer))]

namespace News.Forms.Android
{
    public class VisualNewsRenderer: ViewRenderer
    {
        public VisualNewsRenderer () { } …
Run Code Online (Sandbox Code Playgroud)

xamarin.forms

7
推荐指数
1
解决办法
1万
查看次数

Auth Key 只能下载一次。该授权密钥已被下载

我正在 Apple 开发者中心为 APNS 创建密钥,我了解以下内容 -

下载和备份 下载密钥后,无法重新下载,因为服务器副本已删除。如果您目前不准备下载密钥,请单击“完成”并稍后下载。请务必将密钥备份保存在安全的地方。

但是,即使我刚刚创建了一个密钥并尝试第一次下载它,我也得到了

“身份验证密钥只能下载一次。此身份验证密钥已被下载。”

有谁知道为什么会发生这种情况?

apple-push-notifications

6
推荐指数
2
解决办法
2159
查看次数

C#NSwag和带有Enums的swagger-codegen

我有一个.Net Core v2.1 Web API,它使用NSwag生成其Swagger Json。

我有一个这样的响应模型-

public class LoginResponse
{
    public LoginResult LoginResult { get; set; }
}

public enum LoginResult
{
    AwaitingEmailConfirmation = 0,
    Locked = 1,
    Failed = 2,
    Success = 3
}
Run Code Online (Sandbox Code Playgroud)

生成Swagger JSON的-

"definitions":{  
"LoginResponse":{  
   "type":"object",
   "additionalProperties":false,
   "required":[  
      "loginResult"
   ],
   "properties":{  
      "loginResult":{  
         "$ref":"#/definitions/LoginResult"
      }
   }
},
"LoginResult":{  
   "type":"integer",
   "description":"",
   "x-enumNames":[  
      "AwaitingEmailConfirmation",
      "Locked",
      "Failed",
      "Success"
   ],
   "enum":[  
      0,
      1,
      2,
      3
   ]
},
Run Code Online (Sandbox Code Playgroud)

当在JSON上运行swagger codegen时,我在IO.Swagger项目中为C#获得了以下LoginResult模型(选择了targetFramework 5.0)-

[JsonConverter(typeof(StringEnumConverter))]

public enum LoginResult
{

    /// <summary>
    /// Enum _0 …
Run Code Online (Sandbox Code Playgroud)

c# swagger swagger-codegen asp.net-core-webapi nswag

6
推荐指数
2
解决办法
1841
查看次数

Android,Xamarin Forms PCL,PortableRest PCL和Async Web Api Call

我正在尝试使用PortableRest从Xamarin Forms对Web API 2.2 Rest服务进行异步调用.

我想我有某种死锁/同步上下文问题,但我无法解决(asbie等新手).

有人可以帮忙吗?

我的控制器测试方法(删除了对数据库的任何调用) -

public IEnumerable<ContentModel> GetTestRest()
{
    return new List<ContentModel> {
        new ContentModel() {Categoryid = 1, Title = "Title"}};
}
Run Code Online (Sandbox Code Playgroud)

我的单元测试通行证 -

[TestMethod]
public async Task TestRest()
{
    MyNewsApiClient MyNewsApiClient = new MyNewsApiClient();

    var models = await MyNewsApiClient.TestRest();
    int count = models.Count;
    Assert.AreEqual(1, count);
}
Run Code Online (Sandbox Code Playgroud)

我的PortableRest Proxy(PCL)方法 -

public async Task<List<ContentModel>> TestRest()
{
    var request = new RestRequest();
    request.Resource = "Content/GetTestRest";

    return await ExecuteAsync<List<ContentModel>>(request);
}
Run Code Online (Sandbox Code Playgroud)

Xamarin Forms ContentPage(PCL) -

public partial class …
Run Code Online (Sandbox Code Playgroud)

android async-await xamarin xamarin.forms

4
推荐指数
1
解决办法
2214
查看次数

MAC OSX Mono Nuget如何设置默认的%AppData%\ NuGet\NuGet.config

我可以执行类似的事情 -

单声道--runtime = v4.0.30319 /Library/TeamCity/buildAgent/work/b0d2d3fefe88d393/.nuget/NuGet.exe '安装'/Library/TeamCity/buildAgent/work/b0d2d3fefe88d393/something/packages.config' -源' HTTP: //www.someurl.com/feed/ " -RequireConsent -solutionDir '/库/ TeamCity的/ buildAgent /工作/ b0d2d3fefe88d393 /'

告诉单个Nuget看一个特定的Nuget Source.

但假设由于某种原因我无法修改nuget命令行调用以添加-source参数,我怎么能使用默认配置文件(Windows变量) -

http://docs.nuget.org/consume/command-line-reference#install-command

ConfigFile(v2.5)NuGet配置文件.如果未指定,则将文件%AppData%\ NuGet\NuGet.config用作配置文件.

那么,我可以从这里设置"包源" -

https://docs.nuget.org/consume/nuget-config-settings

这种方法可以在mac上运行吗?

macos mono nuget

4
推荐指数
1
解决办法
2536
查看次数

通过SQL Operations Studio连接到MAC OSX上的Docker SQL Server 2017容器

我按照以下方式启动并运行以下SQL Server 2017容器 -

https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker

CONTAINER ID        IMAGE                                      COMMAND                    CREATED             STATUS              PORTS                    NAMES
910d34ad3c3e        microsoft/mssql-server-linux:2017-latest   "/bin/sh -c /opt/m..."   11 minutes ago      Up 11 minutes       0.0.0.0:1401->1433/tcp   sql1
Run Code Online (Sandbox Code Playgroud)

我可以使用SQLCMD连接docker容器内部.

但是我不确定要在SQL Operations Studio中输入什么来连接它 -

在此输入图像描述

sql-server sql-server-2017 sql-operations-studio

4
推荐指数
1
解决办法
2003
查看次数

在Xamarin Studio中启用MultiDex或ProGuard时出错

我最近打破了64K referencs 的Dalvik限制(https://developer.android.com/studio/build/multidex.html)

/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/ Xamarin.Android.Common.targets:错误:工具退出代码:2.输出:写入输出错误:字段引用太多:77369; max是65536.您可以尝试使用--multi-dex选项.

将一些nugets更新到MonoDroid 7后出错.

当我在android设置中打开MultiDex选项并编译我的项目时,我得到 -

/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.targets:错误:工具退出代码:10.输出:错误:无法读取[/ Library/Frameworks/Xamarin. Android.framework/Versions/7.0.1-3/lib/xbuild-frameworks/MonoAndroid/v7.0/mono.android.jar](无法处理类[android/app/ActivityTracker.class](不支持的类版本号[52.0](最大51.0,Java 1.7)))(pjr.mob.android)

我可以看到与此有关的BUG -

https://bugzilla.xamarin.com/show_bug.cgi?id=44187

https://bugzilla.xamarin.com/show_bug.cgi?id=44013

https://bugzilla.xamarin.com/show_bug.cgi?id=33052

https://bugzilla.xamarin.com/show_bug.cgi?id=35491

看起来我必须手动下载并安装ProGuard 5.X,详见这些答案 -

Xamarin.Android Proguard - 不支持的类版本号52.0

Xamarin Android ProGuard启用

并克服由此产生的任何问题.

然而,Xamarin Studio明确地告诉我们,在proguard选项旁边的(i)信息框中,不建议为DEBUG构建运行proguard,并且我们应该在首先尝试proguard之后运行multidex.

这是否意味着启用后我们无法有效调试?但我无论如何都无法进行DEBUG(即使使用我认为可能有帮助的链接器,我甚至无法运行发布版本)现在还没有启用它?

是否有某种Xamarin支持为此或我需要以某种方式减少我们使用的包等(我不确定我可以做,因为大多数是与Google Play服务相关).

任何帮助表示赞赏.

来自Xamarin Studio的其他信息帮助>关于

Java SDK:/ usr java version"1.8.0_112"Java(TM)SE运行时环境(版本1.8.0_112-b16)Java HotSpot(TM)64位服务器VM(版本25.112-b16,混合模式)

proguard xamarin.android xamarin xamarin-studio

3
推荐指数
1
解决办法
2504
查看次数

初学者RegEx取代性能问题

我有这个简单的正则表达替换为基础的例程,无论如何要改善它的性能(也许它的优雅?)

public static string stripshrapnel(string str)
{
        string newstr = str.Trim();
        newstr = Regex.Replace(newstr, @"-", "");
        newstr = Regex.Replace(newstr, @"'", "");
        newstr = Regex.Replace(newstr, @",", "");
        newstr = Regex.Replace(newstr, @"""", "");
        newstr = Regex.Replace(newstr, @"\?", "");
        newstr = Regex.Replace(newstr, @"\#", "");
        newstr = Regex.Replace(newstr, @"\;", "");
        newstr = Regex.Replace(newstr, @"\:", "");
        //newstr = Regex.Replace(newstr, @"\(", "");
        //newstr = Regex.Replace(newstr, @"\)", "");
        newstr = Regex.Replace(newstr, @"\+", "");
        newstr = Regex.Replace(newstr, @"\%", "");
        newstr = Regex.Replace(newstr, @"\[", "");
        newstr = Regex.Replace(newstr, @"\]", …
Run Code Online (Sandbox Code Playgroud)

c# regex performance

1
推荐指数
1
解决办法
807
查看次数